Claris FileMaker Pro からのエクスポートで任意のヘッダ行をつける

Claris FileMaker Pro で登録されたレコードをエクスポートするとき、フィールド名などを1行目につけたい時があります。標準のエクスポート機能では、Excel 形式か Merge 形式で出力することで1行目にフィールド名を付与することが可能です。

しかしながら、フィールド名をそのままでは出力したくないケースもよくあります。(フィールド名に独自のルールや半角英数のみを用いているなど)。こんなとき、1行目に任意に項目名をつけてエクスポートするテクニックの一つを紹介いたします。

紹介するテクニックは、エクスポートするデータの形式がテキスト形式(コンマ区切り、タブ区切り、固定長など)の場合に利用できます。

やり方としては、用意したグローバルフィールドに、1行目につけたいヘッダ行とレコード内容をまとめて登録し、「フィールド内容のエクスポート」で出力するという方法です。

まずは次の4つのフィールドを追加します。(名前は自由につけてください)
・cExport [ 計算 : テキスト]
・sExport [ 集計 : cExport 一覧 ]
・gExport [ テキスト : グローバル ]
・gExport_Object [ オブジェクト : グローバル ]

出力するレコードの内容を計算フィールドで作成する

◇フィールド名「cExport」

計算フィールドでエクスポートしたいフィールドの内容を区切り文字(コンマ、タブなど)で連結して作成します。各フィールドの値をダブルコーテーションで囲みたい場合は、ダブルコーテーションをエスケープ処理したり、Char 関数を使ったり、または下記のように Quote 関数を使って記述します。例えばコンマ区切り形式で出力する場合以下のように記述します。

上のように、書式を整形する関数も使うことでデータの内容を整えることもできます。出力する項目や順番などは計算式内で調整します。

注:上の例では Quote 関数を使って値をダブルコーテーションで囲むようにしていますが、フィールド内のデータにもダブルコーテーションがある場合は適切に処理をする必要があります。CSVデータの受け入れ先の仕様をよく確認する必要がありますが、Claris FileMaker Pro の標準のエクスポート機能を使ってCSV形式で出力した場合、ダブルコーテーションは二重になって出力されます。(例:「 石川県 “金沢市” 問屋町」 → 「 “石川県 “”金沢市”” 問屋町” 」 )。Quote 関数を使うと、データ内のダブルコーテーションが「 ¥” 」でエスケープされてしまい通常のエクスポート機能で出力した時とはデータが異なって出力されます。ダブルコーテーションで囲みつつ、データ内のダブルコーテーションを二重にして出力するには、例えば以下のような式にします。

Char ( 34 ) & Substitute ( フィールド ; Char ( 34 ) ;  Char ( 34 ) &  Char ( 34 ) ) &  Char ( 34 )

Char ( 34 ) はダブルコーテーションのことです。ダブルコーテーションを計算式に記述するとエスケープ処理をしなければならずわかりづらいため、上記のような式にしてみました。Substitute 関数で、ダブルコーテーションを二重にしています。

また、同様にフィールド内の改行コードの扱いにも注意が必要です。フィールド内の改行は CR(キャリッジリターン)で登録されていますが、通常のエクスポート機能を使う場合は垂直タブに置き換わって出力されます。上で紹介しているやり方の場合は、このままの 改行コード(CR)で出力されます。CSV形式で値をダブルコーテーションで囲む場合は、値に改行が含まれていても大丈夫なケースが多いですが、データの受け入れ先によっては、適切に処理をしないと想定した結果にならないケースもあるのでご注意ください。(エクセルで開く場合は、CR を LF に変換しないと改行として認識されません)

◇フィールド名「sExport」

作成した内容を出力できるように集計フィールドを作成します。集計フィールドのオプションを「一覧」にすることで、対象レコードを改行区切りで取得することができます。

エクスポート処理をスクリプトで作成する

エクスポートする処理をスクリプトで作成します。

まず、フィールド設定でエクスポート用のグローバルフィールド「gExport」に、1行目に出力するヘッダ行を記述したあとに、一覧タイプの集計フィールド「sExport」を改行コードで連結させて登録します。

次に、「TexEncode ( gExport ; “shift_jis” ; 4 ) 」関数を使ってフィールド設定で、オブジェクトタイプのグローバルフィールド「 gExport_Object 」に登録します。

これは、「フィールド内容のエクスポート」の機能を利用する場合、フィールドに入った “テキスト” が対象の時、フィールドに入った”テキスト”が対象のときに文字コードが「 UTF-16 」になるためです。出力したデータを利用するものが UTF-16 にも対応しているならばそれでもいいですが、よく利用される Shift-JIS などの文字コードにしたい場合、上のようにオブジェクトフィールドに “エンコードされたテキストファイル” を格納してエクスポートすることで希望の文字コードで出力することができます。

最後に、出力先やファイル名を変数に登録し、「フィールド内容のエクスポート」で出力します。

注:「フィールド内容のエクスポート」ではなく、「データファイルを作成」「データファイルを開く」「データファイルに書き込む」ステップなどで出力することも可能です。

TextEncode 関数の改行コード引数は、データを受け入れるアプリケーションに合わせて適切に設定してください。(上では Windows 環境でよく使われる CRLF( 4 )で出力しています)

まとめ

上で紹介させていただいたテクニックは、単に任意の項目名を出力するだけでなく、他システムとの連携などで、出力データを所定の書式でフォーマットしなければならないときにも活用できます。

例えば、金融機関への支払データを作成するときに利用される「全銀協フォーマット」などで出力するときには、ヘッダレコード、データレコード、トレーラレコード、エンドレコードの4つの種類のデータを準備する必要があります。データレコードは、上記と同じように計算フィールドで固定長のデータを計算フィールドで用意し、あとはスクリプトでヘッダレコード、データレコード、トレーラレコード、エンドレコードをフィールド設定でグローバルフィールドに連結して登録し、フィールド内容のエクスポートで出力できます。

最近は他システムとの連携には API が利用されるケースも増えていますが、まだまだテキスト連携も活用されています。連携時に面倒なフォーマットを作成する際は、このような方法もあります。ご参考下さい。