FileMaker - Microsoft Word / Excel 連携
FileMaker Advent Calendar 2020 9日目の記事です。
さて、以前、Claris FileMaker Pro と Microsoft Word / Excel との連携の動画をアップしたのですが、中身の解説がされていなかったので、備忘録がわりに記載したいと思います。
360Works 様の Scribe というプラグインを使って、連携させます。
360Works Scribe プラグインの説明
「Scribe を使って、Microsoft Office や PDF ファイルの処理を自動化することができます。フォームの入力、画像の挿入、ドキュメントのバージョン間の変更点の強調表示、Microsoft Word や Excel のテーブル操作、Excel のテーブルセルからのメタデータの取得、PDF ファイルの安全性確保などが可能です。
Scribe 4 では、FileMaker オブジェクトフィールド内の PDF をマージしたり、スプライスしたり、FileMaker で OCR を実行したりすることができます。」
と記載されています。
今回は、FileMaker Pro と Microsoft Word / Excel の連携についてです。
Scribe プラグインのダウンロード
上記の URL から、Download Demo をクリックして、ダウンロードのページに移動します。
デモバージョン ( Free ) をダンロードします。「製品は、ライセンスキーが登録されるまでデモモードで動作します。デモモードの間は、FileMaker(サーバー展開の場合は FileMaker Server)を起動するたびに、製品は 2 時間実行されます。
2 時間のデモ期間を更新するには、FileMaker を終了して再起動することができますが、有効期限はありません。デモは期間中は完全に機能します。」と記載されています。
2 時間経ったら、FileMaker Pro を再起動すれば、期限なく使える状態です。( 詳細は大元のサイトの規約等をご確認ください。 )
ダウンロードされた Zip ファイルを解凍して、自分に合った OS のファイルをコピーして、FileMaker Pro のプラグイン用のフォルダに移動させます。
FileMaker Pro のプラグイン用のフォルダは次の URL を参照にしてください。
Windows の場合: C:¥users¥ユーザ名¥AppData¥Local¥FileMaker¥FileMaker Pro¥19.0¥Extensions¥
macOS の場合: Macintosh HD/ユーザ/ユーザ名/ライブラリ/Application Support/FileMaker/FileMaker Pro/19.0/Extensions
FileMaker Pro の設定
FileMaker Pro の環境設定を開き、360Works Scribe プラグインを有効にします。
これで、FileMaker Pro の設定は完了です。
フィールドの準備
今回は、Title、日付、備考のフィールドを作成し、後で Word 内のデータを置換できるようにフィールドのコメントに、[Title]、[日付]、[備考]と入力しておきます。
連携したいファイルを入れられるように、オリジナルファイルというオブジェクトフィールドと、変換されたファイルというオブジェクトフィールドを追加しておきます。
Microsoft Word の準備
Microsoft Word の文章の中に、FileMaker のデータで置換しておきたい文字列を追加しておきます。今回は、[Title]、[日付]、[備考]の 3 つになります。
FileMaker の準備
上記の Microsoft Word のファイルをオリジナルファイルのフィールドに挿入しておきます。
置換したい文字列をそれぞれ入力しておきます。
スクリプトを作成
#
変数を設定 [ $LicenseInfo ; 値: ScribeLicenseInfo ]
変数を設定 [ $Timestamp ; 値: GetAsTimestamp ( Substitute ( GetValue ( $LicenseInfo ; 5 ) ; "Expires on: " ; "" ) ) ]
変数を設定 [ $Type ; 値: GetValue ( $LicenseInfo ; 3 ) ]
#
#
If [ $LicenseInfo = "?" ]
変数を設定 [ $URL ; 値: "https://360works.com/filemaker-pdf-plugin/" ]
カスタムダイアログを表示 [ "プラグイン確認" ; List ( "プラグインがインストールされていません。" ; "次の URL よりダウンロードしてください。" ) ; $URL ]
現在のスクリプト終了 [ テキスト結果: False ]
Else If [ $Timestamp < Get ( タイムスタンプ ) ]
カスタムダイアログを表示 [ "ライセンス確認" ; List ( "ライセンスが過ぎています。" ; "" ) ]
現在のスクリプト終了 [ テキスト結果: False ]
Else If [ IsEmpty ( FileMakerToOffice::オリジナルファイル ) ]
カスタムダイアログを表示 [ "ファイル確認" ; "ファイルが存在しません。" ]
現在のスクリプト終了 [ テキスト結果: False ]
End If
#
# オリジナルのファイルをテンポラリに出力する。
変数を設定 [ $Name ; 値: GetContainerAttribute ( FileMakerToOffice::オリジナルファイル ; "filename" ) ]
変数を設定 [ $path ; 値: Get ( テンポラリパス ) & Get ( UUID ) & $Name ]
フィールド内容のエクスポート [ FileMakerToOffice::オリジナルファイル ; 「$path」 ; フォルダを作成: オフ ]
変数を設定 [ $ScribeDocLoad ; 値: ScribeDocLoad ( $path ) ]
#
# 変換する文字列を取得する。
変数を設定 [ $FieldNames ; 値: FieldNames ( Get ( ファイル名 ) ; Get ( レイアウト名 ) ) ]
変数を設定 [ $max ; 値: ValueCount ( $FieldNames ) ]
Loop
Exit Loop If [ Let ( $i = $i + 1 ; $i > $max ) ]
変数を設定 [ $fieldName ; 値: GetValue ( $FieldNames ; $i ) ]
変数を設定 [ $Comment ; 値: FieldComment ( Get ( ファイル名 ) ; $fieldName ) ]
If [ not IsEmpty ( $Comment ) ]
# 変更する内容
変数を設定 [ $ScribeDocSubstitute ; 値: ScribeDocSubstitute ( $Comment ; Evaluate ( Case ( PatternCount ( $fieldName ; "::" ) = 0 ; ( Get ( レイアウトテーブル名 ) & "::" & $fieldName ) ; $fieldName ) ) ) ]
# 変更する内容はここまで
End If
End Loop
フィールド設定 [ FileMakerToOffice::変換されたファイル ; ScribeDocSaveContainer ( $Name ) ]
フィールド内容のエクスポート [ FileMakerToOffice::変換されたファイル ; 「$path」 ; 自動的に開く ; フォルダを作成: オフ ]
#
結果
スクリプトを実行すると、置換されたファイルが表示されます。
本家のドキュメントには、もっとシンプルに記載されています。ScribeDocLoad でフィールドを指定できるようです。素晴らしい!
#load the document first
ScribeDocLoad[Container Or URL: myTable::myDoc]
#replace the placeholders in the document with information from FileMaker
ScribeDocSubstitute[Search Text: "CUSTOMERNAME";Replace Text:Customer::Name]
ScribeDocSubstitute[Search Text: "ACCOUNTNUMBER";Replace Text:Accounts::Number]
ScribeDocSubstitute[Search Text: "ACCOUNTBALANCE";Replace Text:Account::Balance]
ScribeDocSubstitute[Search Text: "DUEDATE";Replace Text:Account::Due Date]
#Save the document to a container. You can also use ScribeDocSaveFile to save directly to the hard drive.
ScribeDocSaveContainer[Select;Result: Customer::Correspondence;New Name:""]
最後に
Microsoft Word や Excel は、非常に多くの企業で使われています。FileMaker を敬遠している企業の多くは、これら Microsoft Word や Excel を大量に保有しており、差込印刷など、さまざまなテクニックを用いて運用しています。
FileMaker と Microsoft Word や Excel の連携がシームレスにできれば、企業内でもうまく共存できるのではないか、と個人的には思っています。
Scribe プラグインは、個人であれば、約 1 万円、10 人までであれば、約 3 万円、それ以上の人数であれば、約 7 万円で購入できる。コストパフォーマンスを考えれば、すぐに元が取れると思う。( ライセンスについてご指摘いただきました。350さんありがとうございます! )
サンプルファイル
( 変数名が間違っていたので、再アップロードしました ( 2020/12/09 09:00 ) )
参考
参考資料は多い方が助かります。次の記事もご参照ください。