この記事で扱っていること
- テンプレートとして用意したWordファイルの指定の場所に値を書き込む方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWのProfessional Development Systemで標準付属するReport Generation Toolkitというアドオン、これでWordやExcelの操作が可能になります。
測定したデータをWordやExcelの形式でまとめてレポートを作ることが可能になるため、WordやExcelと併用して何かレポートを作成する必要がある場合には便利な機能と言えます。
それぞれの関数も使いこなせればいいんですが、関数をたくさん置くのが結構面倒だったりするときもあります。
そこで、テンプレートファイルを用意してそこに値を入力するという機能をExpress VIを使って行おうと思ってやってみました。
どんな結果になるか
Wordを使おうと思って調べると、NIサンプルファインダに例がありました。どんなものが出来上がるのか、まずはイメージとして持っておくのがいいと思い早速実行してみます。

様子はつかめたので、実際にオリジナルのWordファイルに対してサンプルで見たような操作を行うのですが、まずは肝心のWordファイルのテンプレートを作成する必要があります。
そのWordファイルに対して、この部分にLabVIEWからの入力値を書き込みますよ、といった設定を行う必要があるのですが、そのために必要なのが「ブックマーク」です。
要は、テンプレートとするWordファイルの中で、LabVIEWから値を書き込みたい部分にブックマークをしておくことで、LabVIEWでそのテンプレートを呼んだときにブックマーク名が表示され、ここに書き込みたい値を配線していくようなイメージとなります。
プログラムの構造
もう少し具体的に見ていくことにします。例えばサンプルファインダのサンプル、Word Report – Generation from Template.viの場合、ここで呼び出されているWordファイルは
C:\Program Files (x86)\National Instruments\<LabVIEW version>\examples\Report Generation\Word Reports\Support Files
にあることがわかります。

この中のWord Templateのファイルを開いて、登録されているブックマークを見ると、サンプルで指定された名前と一致しているのがわかります。

このファイルの用意の仕方はWordの操作になります。特に難しいことはなく、ブックマークしたい箇所を選択してからブックマークに追加することで登録できます。そしてLabVIEWでそのWordファイルを読み取ったときにExpress VIで自動的に項目が出るという仕組みになっています。
一連の流れを実際の画面つきでご紹介します。
何はともあれまずはテンプレートを用意します。とにかくプログラム的に書き込みたい部分にどしどしブックマークを設定していきます。

表への入力も定義することができますが、その場合には表全体にブックマークを行います。これらが終わったら、テンプレートファイルとして保存します。

次にLabVIEW側です。今回はExpress VIを使用する方法でいきます。
レポート生成のパレットにMS Office ReportのExpress VIがあるのでこれを選択してブロックダイアグラム上に置きます。
表示されるダイアログでTemplateにはCustom Report for Wordを指定し、その下のパス入力で先ほど作成したテンプレートファイルを指定します。ブックマークがうまくいっているとそれらがリストされるので、項目ごとに入力形式を決めます(基本Automaticで大丈夫ですが、表形式の部分はTableにします)。

Express VIの構成が終わったら、各入力に対して通常のLabVIEWプログラム同様入力値を配線します。

実行ボタンが壊れていないことを確認して実行するとWordに入力値が反映された状態で表示されます。

Excelの場合
実際はExcelも同様な方法でテンプレートに値を渡せます。なお、Excelの場合には名前で定義された部分がLabVIEW上のExpress VIで表示される項目と一致します。

これらの機能を使えば、例えばデータ測定のプログラムで得られた結果をそのままテンプレートに渡せるので、毎回統一的なレポートを作成することができます。報告書作成に便利ですよね。
Express VIを使用するとカスタマイズ性に欠けるという弱点はあるのですが、もしカスタマイズをしたいのであればサンプルで確認できるような下位関数を一つ一つおいて構成するしかないようです。
どのように構成するかは、サンプルファインダのサンプルで確認することができます(サンプルにはExpress VIを使用した場合と下位関数を使用した場合両方のコードがあります)。
また、Express VIの場合、入力項目の数は17までと制限があるようです。もしこれ以上の項目をテンプレートで使用している場合にはExpress VIでは対応できないのでやはり下位関数を使う必要がありそうなのでそんな場合にもサンプルの組み方を参考にしてみてください。
ここまで読んでいただきありがとうございました。
コメント