知人から、「同じフォーマットのHTMLページを大量(約500ページ)作りたいんじゃけど、何か良い方法ない?」
と相談を受けました。
内容はこう。
要は機械のカタログページを作りたい。
エクセルのブックに、「機械の名称」「機械カタログのPDFファイルの名前」「画像ファイルの名前」がある。
これを元にして一括でHTMLを出力したい
とのことでした。
ここまで聞いてWordpressを勧めましたが、友人はHTMLじゃないとデザインできないのでHTMLでしたい。と言います。
友人がデザインしたHTMLをテンプレートとして同じフォーマットのHTMLのページを一括で出力したい
とのことでした。
まあ、HTML自体はテキストファイルなのでVBAで出力すれば簡単なのですが、HTMLテンプレートに差し込むのが面倒くさそう。
実際、一からテンプレートを作ってやってみると面倒くさいことこの上ない。
そこでVBAで使えるHTMLテンプレートエンジンを探してみました。
見つけました。「MiniTemplator」
VBA以外にもJAVAなど何種類かの言語に対応しています。
英語のサイトでよくわからなかったのですが、google先生で情報を検索しながら試行錯誤。
何とかVBAでの出力が出来ました。
何とかVBAでの出力が出来ました。
まず、「MiniTemplator」から「Visual Basic (VB/VBA) Version」の MiniTemplator_vbasic.zip をダウンロードします。
ダウンロードしたzipファイルを解凍して、「MiniTemplator.cls」をVisualBASICEditorのクラスモジュールにインポートします。
ダウンロードしたzipファイルを解凍して、「MiniTemplator.cls」をVisualBASICEditorのクラスモジュールにインポートします。
次にテンプレートファイルを用意します。
形式はhtml。まず<!– $BeginBlock block1 –>と<!– $EndBlock block1 –>で置換したい部分を指定します。block1の部分は自分で好きな名前をつけてください。
形式はhtml。まず<!– $BeginBlock block1 –>と<!– $EndBlock block1 –>で置換したい部分を指定します。block1の部分は自分で好きな名前をつけてください。
<!– $BeginBlock block1 –>以降<!– $EndBlock block1 –>までの箇所がMinitemplatorで処理される箇所になります。
次に<!– $BeginBlock block1 –>から<!– $EndBlock block1 –>までの部分でMinitemplatorで置換したい項目を「${animal1}」のような形で、${ と }で囲みます。
そして、vbaで処理を書きます。
公式サイトのサンプルプログラムはこんな感じ
Attribute VB_Name = "Sample1" ' Sample1 ' A simple example of how to use the MiniTemplator class. Option Explicit Public Sub main() Dim t As New MiniTemplator t.ReadTemplateFromFile "Sample1_template.htm" t.SetVariable "animal1", "fox" t.SetVariable "animal2", "dog" t.AddBlock "block1" t.SetVariable "animal1", "horse" t.SetVariable "animal2", "cow" t.AddBlock "block1" t.GenerateOutputToFile "Sample1_out.htm" MsgBox "HTML page written to file Sample1_out.htm." End Sub
これを実行するとテンプレートファイルの${animal1}と${animal2}がfox、dogに置換され、block1の部分が書きだされます。
さらにhorse、cowと続けて置換して、block1の部分が追加して書きだされます。
表などの追加に便利ですね。
今回はエクセルのデータをaccessにインポートして若干の加工を行い、VBAでMinitemplatorを利用して、約500ページのhtmlを出力しました。
使ってみた感想ですが、テンプレートを読み込んでタグを置き換える処理が省けるのでかなりの時間短縮になりました。
英語の説明なので最初は戸惑いましたが、実際に使いはじめるとサンプルプログラムを参考にして何とかなりました。
英語の説明なので最初は戸惑いましたが、実際に使いはじめるとサンプルプログラムを参考にして何とかなりました。
文法も比較的簡単です。
当初は自分で置換処理をプログラミングし始めましたがとにかく面倒。Minitemplatorのお陰でだいぶらくさせてもらいました。
作者さまに感謝