レイアウト上のレコード内容をCSV化する

レイアウト上のレコード内容をCSV化する

新年早々、ご質問をいただきました。

> FileMaker でCSV形式で出力する際に、項目名の行も一緒に出したいのですが、
> チェックボックスがありません。
> 項目名の入ったレコードを作っておいてコピペしたいです

おそらく次のようなことを実現したいのでしょう。

  • FileMaker でテーブル内容をCSV形式で出力したい
  • FileMaker の仕様でCSVフォーマットでのエクスポートをする場合フィールド名をつけられない
  • そこで1行目をフィールド名(項目名)として出力したい

CSVフォーマットとは、カンマ区切りのテキストファイル形式で、Excelでも開くことができるデータフォーマットです。テキストファイルの形式なので、メモ帳などのテキストエディタでも表示できます。

1. フィールド名を取得する

FileMaker の関数に、ファイル名のレイアウト名にあるフィールド名の一覧を取得する FiledNames というものがあります。

FiledNames( ファイル名 ; レイアウト名 )

レイアウト上にあるフィールドのみ取得するため、CSVの項目名としたいフィールドはレイアウト上に配置するか、非表示の場所にフィールドを配置します。準備ができたら、この関数を使いフィールドリストを取得します。

FieldNames ( Get(ファイル名) ; Get(レイアウト名) )
2. レコード内容をすべて取得する
FileMaker のレコード内容をすべて取得するとても便利な関数があります
ExecuteSQL ( SQLクエリー; フィールド区切り; 行区切り )

※ フィールド区切りはエクセルの横軸区切り、行区切りはエクセルの縦軸区切りです。
CSVの場合、フィールド区切りはカンマです。ExecuteSQL の初期状態でフィールド区切りはカンマを指定しています。つまりカンマを指定しなくても最初からカンマ区切りとなっています。

またCSV野場合、行区切りは「改行」です。ExecuteSQL の初期状態で行区切りは改行を指定しています。こちらも改行を指定しなくても最初から改行区切りとなっています。

 例) 「顧客」テーブルに「名前」「電話番号」フィールドがある場合

ExecluteSQL(
 "select ""名前"", ""電話番号"" from ""顧客""";
 ""; // フィールド区切り文字
 ""; // 行区切り文字
)

これら2種類の関数を組み合わせることで1つのフィールドにまとめられます。
さらにCSV形式で出力したい場合を含めたスクリプトステップを以下に示します。

1 : フィールド設定[ フィールド内容をまとめる::結果;  ※計算式※ ];
2 : フィールド内容をエクスポート[ フィールド内容をまとめる::結果; 「顧客.csv」; フォルダを作成: オフ ]
// 項目名を設定
substitute( FieldNames ( get(ファイル名); get(レイアウト名) ); "¶"; "," ) & ¶ & 

// レコード内容を一気に読み込んで設定
ExecuteSQL( "select ""名前"", ""電話番号"", ""郵便番号"", ""住所"" from ""フィールド内容をまとめる"""; ""; "" )
Enjoy!!