Claris FileMaker Pro を使って自分の業務に合ったソリューション (カスタム App ) を作成し、データをある程度集めて活用できるようになると、今度は「 Excel や CSV などのファイル形式でデータを活用したい」という欲求が出てくるかもしれません。そこで今回は、FileMaker Pro を使ってデータを Excel 形式で出力する方法についてご紹介します。
FileMaker Pro でレコードを出力 (エクスポート) する方法は大きく 2 つあります。
① メニューから「レコードのエクスポート」を選択
② スクリプトや単一ステップから「レコードのエクスポート」ステップを使う
① メニューから「レコードのエクスポート」を選択
この方法はレコードを出力する方法として一番シンプルで簡単です。ただ、弱点もあります。それは出力条件を記憶させられないこと。「どういったデータを、どこに、どんな名前で出力するか」を毎回指定する必要があるので、ルーチン作業には向いていません。またセキュリティが厳しい場合、誰もが勝手に出力するということがないように、この機能を使えないように設定していることもあります。
② スクリプトや単一ステップから「レコードのエクスポート」ステップを使う
FileMaker Pro には画面上のボタンを押したときなどに、一連の処理を実行できるスクリプトや単一ステップがあります。スクリプトは 1 度で複数の処理を順番に実行できます。単一ステップは名前の通り、 1 つの処理だけが実行できます。
レコードを出力する場合、以下のような処理の流れが考えられます。
- 出力の対象となるレコードを検索する (検索済みの場合もある)
- 出力先のパス、ファイル名、形式 (拡張子) を指定する
- 出力する項目 (フィールド) を指定する
- 出力を実行する
このように、複数の処理を連続で実行したい場合は単一ステップではなくスクリプトを作成すると便利です。以下の手順で、汎用的に使えるスクリプトを作ってみましょう。
レコード出力のスクリプトを作成
今回作成するスクリプトは以下の処理を行うものとします。
- 画面 (レイアウト) 上のボタンから実行する
- 現在対象となっているレコードを出力するため、スクリプト内で検索はしない
- 出力する項目を指定・確認するダイアログは表示しない
- 出力形式は Excel (.xlsx )
- 出力先はパソコンのデスクトップを指定し、ファイル名は毎回ユニークになるようにする
- 出力する項目 (フィールド) は毎回同じものとする
サンプルファイルは「作成」タブの Starter にある「コンテンツ管理」を使用します。
1. ボタンを作成
レイアウトモードに切り替えて、画面上部にある「上部ナビゲーション」にボタンを追加します。ラベルは「出力」として、処理は「スクリプト実行」を選択します。スクリプト指定ダイアログが表示されるので、「+」ボタンを押して、スクリプト名には「レコードをExcelで出力する」と入力します。
2. スクリプトを作成
レコードを出力するためのスクリプトステップを指定します。画面右側のスクリプトステップパネルの検索ボックスに「エクスポート」と入力すると、「フィールド内容のエクスポート」と「レコードのエクスポート」の 2 つの選択肢が出てくるので、「レコードのエクスポート」を選択します。なお、「フィールド内容のエクスポート」はカーソルが入っているフィールドの内容だけを出力するという機能で、今回の目的とは異なるため使いません。
「レコードのエクスポート」ステップは 4 つの指定する項目があります。
- ダイアログあり:オン/オフ・・・・出力する先や項目などを指定するダイアログを表示する/しない設定
- フォルダを作成:オン/オフ・・・・出力先として新たにフォルダを作成する場合はオンにする
- 出力ファイルの指定
- エクスポート順の指定
このうち、ポイントとなるのが「出力ファイルの指定」と「エクスポート順の指定」です。
3. 出力ファイルの指定
「出力ファイルの指定」のダイアログを初めて見た方は設定方法がわからず戸惑ってしまうかもしれません。
(ちなみに、このダイアログは Ver. 8 の頃から変わっていないのでそろそろアップデートされても良さそうですが 〈執筆時点の最新は Ver. 19.6 〉 ……)
それはさておき、ここでのポイントは出力先のパスは関数を使って指定できるということです。
取得関数の中には、パスに関する関数があります。(「取得関数」については、こちらをご確認ください)
- Get (デスクトップパス)
- Get (ドキュメントパス)
- Get (テンポラリパス)
- Get (ファイルパス)
- Get ( FileMaker パス)
- Get (環境設定パス)
この中で一般的に使うのは上からの 3 つです。ユーザのデスクトップ、ユーザのドキュメントフォルダ、テンポラリ (一時保存場所) が使いこなせればほぼ問題ありません。特殊な例だと、Windows の C ドライブ直下にある特定のフォルダに出力したり、共有フォルダに直接出力することもできます。
最初に「出力先はパソコンのデスクトップを指定し、ファイル名は毎回ユニークになるようにする」としましたので 「 Get (デスクトップパス) 」関数を使用します。この関数を利用する 1 番の理由は、「パソコンのデスクトップパスは使うパソコンによって違うから」です。
例えば、
- 鈴木さんの Windows パソコンは「 C:/Users/Suzuki/Desktop/ 」
- 佐藤さんの Windows パソコンは「 C:/Users/Sato/Desktop/ 」
- 高橋さんの macOS パソコンは「 Macintosh HD/Users/Takahashi/Desktop/ 」
のように使っている OS やユーザによってデスクトップのパスが変わります。 1 台のパソコンで使っているときには大きな影響はありませんが、複数台で共有して使う場合は注意する必要があります。
関数を使ってパスを生成するので「変数ファイルパス」を追加します。「変数」という言葉を聞いたことない方は「値を入れておく箱」と考えていただくとわかりやすいです。たとえば、パソコンでコピー&ペーストはよく使われる機能ですが、このときにコピーした内容はクリップボードに保存されていますよね。このクリップボードと同じように、スクリプトの中で一時的に保存したい内容を入れておく、という役割なのがこの「変数」です。
変数を作成するために「レコードのエクスポート」ステップの前に「変数を設定」ステップを追加します。名前は「 $パス」にしておきます。「 $ [変数名]」 (変数名の前に $ が 1 つ) はローカル変数と言って、当該スクリプトが終わった段階で変数が消えてしまいます。「 $$ [変数名]」 (変数名の前に $ が 2 つ) はグローバル変数と言って、スクリプトが終了しても変数が残るという違いがあります。今回は単にファイルパスを保存するための変数であり、スクリプトが終わったら消えても構いませんのでローカル変数を使用します。
値にはこのような計算式を追加します。
"file:" & Get ( デスクトップパス ) & "サンプル" & Filter ( Get ( タイムスタンプ ) ; "0123456789" ) & ".xlsx"
こちらも順番に確認します。
- "file:"・・・パスの接頭語です。省略しても動作します。
- Get ( デスクトップパス ) ・・・実行しているパソコンのデスクトップまでのパスを返します。
- "サンプル" & Filter ( Get ( タイムスタンプ ) ; "0123456789" ) ・・・ファイル名ですが、ユニークにするためにタイムスタンプを付けています。タイムスタンプは通常、日付の区切りに「/」が入りますが、「/」はファイル名には使用できないので Filter 関数を使って数字だけが表示されるようにしています。
- ".xlsx"・・・出力するファイル形式に合わせた拡張子が必要になります。付け忘れると形式不明ファイルになるので注意しましょう。
たとえば、 2022 年 12 月 01 日の 16 時 28 分 31 秒に実行した場合、「サンプル20221201162831.xlsx」というファイル名となります。
ファイル名にタイムスタンプまで必要ないのでは? と思う方も多いでしょう。しかし、タイムスタンプを付けずに、たとえば「サンプル.xlsx」というファイル名で出力した場合、この Excel ファイルを他のアプリケーションで開いた状態のまま再度レコードを出力すると、上書きができずに書き込みエラーとなってしまいます。テストをしているときはトライ&エラーで何度もスクリプトを直したり、レイアウトを直したりの繰り返しになるので、タイムスタンプを付けることでユニークなファイル名にし、いちいち書き込みエラーを発生させないという目的もあります。
4. エクスポート順の指定
エクスポート順の指定はとても簡単です。ポイントになるのは、[現在のテーブル]は今表示しているレイアウトが基準になるということです。エクスポートの設定をする際には、実際に使用するレイアウトを表示させたうえでスクリプトワークスペースを操作することをお勧めします。
フィールド名をダブルクリックするか、「移動」ボタンをクリックすることで [フィールドのエクスポート順]に追加できます。
関連テーブルのフィールドも指定することができます。その場合は「メモ::メモ」のように「テーブルオカレンス名::フィールド名」で表示されるので、現在のテーブルオカレンスと違うことがすぐにわかります。今回は詳しく説明しませんが、レイアウトのテーブルオカレンスが「コンテンツ管理」「メモ」のそれぞれのときで、エクスポートされるファイルの内容がどのように変化するかを確認するとよいでしょう。
オプションの[エクスポートされたデータに現在のレイアウトのデータ書式を適用する]をチェックについて説明します。例えば、インスペクタから数字フィールドに通貨の指定「 ¥1,000 」と表示されるように設定を行っていても、エクスポートしたファイルは「 1000 」になってしまいます。このオプションにチェックを入れることで、レイアウトの表示と同じようになります。ただし、数字形式や日付形式からは外れてテキスト形式と認識してしまう可能性もあるので、互換性が求められる時にはチェックしないようにしましょう。
5. スクリプトを保存してテスト
完成したスクリプトを保存してスクリプトを実行してみましょう。デスクトップに生成されたファイルを確認して、現在対象となっているレコードが出力されていれば成功です。
今回は一番ポピュラーなデスクトップへの出力ということで説明しましたが、Get ( デスクトップパス ) を Get ( テンポラリパス ) 、Get ( ドキュメントパス ) などに変えることで他の場所にレコードを出力することもできます。
今回ご紹介した操作を短い動画にまとめていますので、途中の操作がわからなかったという方はこちらもご覧ください。
まだ FileMaker Pro をお持ちでない方は無料評価版から始めましょう!
無料評価版はこちら