代表

ご訪問いただきありがとうございます。

このブログでは、弊社代表が日々の開発業務の中で学んだことや、調べた内容、実際にハマったことなどを、備忘録としてまとめています。
また、技術内容を整理し、分かりやすく言語化するトレーニングも兼ねて記事を作成しています。

弊社では、
FileMakerによる業務システム開発、
Windows CE端末向けアプリケーション開発、
WordPressを利用したホームページ制作などを行っております。

同じような課題で困っている方の参考になれば幸いです。

FileMakerでは、テーブルの内容をそのままCSVとしてエクスポートするだけであれば、標準機能で簡単に出力できます。
しかし実際の業務では、フィールド内の文字によってCSVが崩れることがあります。

  • フィールド内にカンマ(,)が含まれている
  • 改行を含むテキストがある
  • ダブルクォーテーション(”)が入っている
  • Excelで開くと文字化けや先頭「0」消失が発生する

など、CSV特有の問題にハマることがよくあります。

特にExcelはCSVを独自解釈するため、「CSVとして正しい」だけでは正常に表示されないケースもあります。

このページでは、FileMakerからCSVを出力する際の方法について、備忘録的にまとめています。

CSVの基本ルール

CSV(Comma Separated Values)は、データを「カンマ区切り」で保存するテキスト形式です。

基本的なルール
  • カンマ(,)で項目を区切る
  • 1行が1レコードになる

FileMakerの改行コード一覧

種類内容
Char ( 13 )CR(Carriage Return)
Char ( 10 )LF(Line Feed)
Char ( 13 ) & Char ( 10 )CRLF

一般的なFileMakerの改行は、Char ( 13 ) が使われることが多いですが、CSVやWindows系ソフト、Excelとの連携では、CRLF(Char ( 13 ) & Char ( 10 ))が使用されるケースが多くあります。

特にCSVでは、”レコードの改行” ”Excelセル内改行”などでCRLFを使用することが多いため、用途によって使い分ける必要があります。

CRLFとは?いつ使う?

CRLFとは、「Char ( 13 ) & Char ( 10 )」を組み合わせた改行コードのことです。

Windows系のテキストファイルやCSVでは、一般的にこのCRLFが改行として使用されています。

FileMakerでCSVを扱う場合も、

・CSVのレコード改行
・Excelセル内改行
・Windows向けテキスト出力

などで使用されることが多くあります。

Quote()とは?

Quote()は、文字列をダブルクォーテーション(”)で囲むFileMakerの関数です。

Quote()が必要なケース

CSVでは次の場合、データを安全に扱うために、Quote()で囲むことが重要になります。

・カンマを含む
・改行を含む
・ダブルクォーテーションを含む

CSV出力では、列ズレや行崩れ防止のため、基本的にQuote()を使用しておくと安全です。

ダブルクォーテーションを含む場合の注意

CSV内で、データ自身にダブルクォーテーション(”)を含む場合は注意が必要です。
CSVでは、ダブルクォーテーションを文字として扱いたい場合、「””」のように2重にしてエスケープするルールがあります。
FileMakerのQuote()を使用すると、このエスケープ処理も自動で行われます。そのため、CSV生成時に手動で 「”」 を追加するよりも、Quote()を使用する方が安全です。
特に、自由入力の項目では、意図せず ” が含まれていることがあるため注意が必要です。

・商品名
・備考欄
・メモ欄

FileMakerでCSV1行を組み立てる例

FileMakerでCSVの1行を組み立てる場合は、各項目をカンマで連結して作成します。

</>FileMaker
Quote ( 商品コード ) & "," &
Quote ( 商品名 ) & "," &
Quote ( 備考 )
</>CSV
"001","サンプル商品","テストデータ"

複数行CSVを生成する方法

複数行のCSVを生成する場合は、「1行分のCSV文字列」を改行コード(CRLF)で連結して作成します。

基本的な考え方は、
CSV1行目 & CRLF & CSV2行目
という形になります。

</>FileMaker
行1 = Quote ( A ) & "," & Quote ( B )
行2 = Quote ( C ) & "," & Quote ( D )

csv= 行1 & Char ( 13 ) & Char ( 10 ) & 行2
</>CSV
"001","商品A"
"002","商品B"

また、複数行生成では、FileMakerの List() を使用する方法もあります。
ただし、環境によって改行コードが変わる場合があるため、CSV用途では明示的にChar ( 13 ) & Char ( 10 )を使用する方が安全なケースもあります。

特にExcel連携やWindows向けCSVでは、CRLFを使用する方法が安定しやすいです。

TextEncode()でUTF-8化する

CSVをExcelで開く場合、文字コードによっては日本語が文字化けすることがあります。
その対策としてよく使用されるのが、FileMakerの TextEncode() 関数です。

</>FileMaker
TextEncode ( csvデータ ; "utf-8" ; 1 )

とすることで、CSVデータをUTF-8形式へ変換できます。
第3引数を「1」にすると、BOM付きUTF-8となり、Excelでも文字化けしにくくなります。

・日本語を含むCSV
・Excelで開くCSV
・他システムへ渡すCSV

特に上記では、UTF-8 + BOM付きにしておくと安全なケースが多くあります。

Excelで開くと崩れる原因

CSVは単純なテキストファイルですが、Excelで開くと自動変換が行われるため、意図しないデータ変換が発生することがあります。
代表的な例を以下にまとめます。

症状原因対策
文字化けUTF-8を正しく認識していないTextEncode()でUTF-8+BOM付きにする
先頭の0が消えるExcelが数値として解釈する
例:00123→123
Quote()で囲む
Excelインポートを使用
日付に変換される「1-2」などを日付扱いする
例:「1-2」→1月2日
文字列扱いにする
長い数字が変わる指数表記へ自動変換される文字列として出力する
勝手に数値変換されるExcelの自動判定CSV直接開きではなくインポート使用

よく使うCSV生成パターン集

セル内改行

Excelのセル内で改行したい場合は、CRLFをQuote()内に含めます。

</>FileMaker
Quote (
"1行目" &
Char ( 13 ) & Char ( 10 ) &
"2行目"
)
</>CSV
001Apple青森
岩手

改行なし

フィールド内の改行を削除して、1行データとして出力したい場合。

</>FileMaker
Substitute (
テキスト ;
Char ( 13 ) ; "" ;
Char ( 10 ) ; ""
)
#必要に応じて、スペースへ置換する
Substitute (
    テキスト ;
    Char ( 13 ) ; " " ;
    Char ( 10 ) ; " "
)

空白対策

空白だけのデータを判定したい場合。

</>FileMaker
If (
IsEmpty ( TrimAll ( テキスト ; 1 ; 1 ) ) ;
"" ;
Quote ( テキスト )
)
#不要なスペースのみのデータを除外

NULL対策

値が空の場合でも、CSV崩れを防ぐため空文字を返す例。

</>FileMaker

Case (
IsEmpty ( テキスト ) ;
Quote ( “” ) ;
Quote ( テキスト )
)

#空のデータもCSV列数を維持

</>CSV出力
"001","","テスト"

安全寄りの基本形

基本的に全項目をQuote()で囲む形が安全です。
カンマ・改行・ダブルクォーテーション混在時でも、CSV崩れを防ぎやすくなります。

</>FileMaker

Quote ( A ) & “,” &
Quote ( B ) & “,” &
Quote ( C )

よくあるミスまとめ

まとめ

CSVはシンプルな形式ですが、実際には「カンマ」「改行」「Quote(”)」の扱いが非常に重要です。

特に次のデータでは、Quote()による適切な囲み処理を行わないと、列ズレや行崩れの原因になります。

  • カンマを含む
  • 改行を含む
  • ダブルクォーテーションを含む

また、ExcelはCSVを独自解釈するため、次の事象が発生することがあります。

  • 文字化け
  • 先頭0消失
  • 日付への自動変換
  • 数値の指数表記化

そのため、実務では
・UTF-8 + BOM付き
・全項目をQuote()で囲む
という形にしておくと、トラブルを減らしやすく安全です。

こんなこと頼めるかな?」って段階でも
お気楽にご相談ください。
問い合わせ

問い合わせは無料です(^^♪