• ベストアンサー

ExcelのCSVファイル出力について

Excelが出力したCSVファイルを扱うプログラムに関する質問です。 Windwosの[コントロールパネル]⇒[地域と言語のオプション]で、 小数点の記号を「.(ピリオド)」から「,(カンマ)」に変更しました。 するとExcelからCSVファイルを出力したときの各データの区切り文字が 「,(カンマ)」から「;(セミコロン)」に変わるようなのですが、 これに対応できるプログラムを作りたいと考えています。 CSVファイルの区切り文字は、Windowsのロケール情報として プログラム上から取得可能なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

API の getLocaleInfoは、あくまでも、WindowsのLocale 情報であって、CSVファイルは、出力時には、WindowsのLocaleに従っても、ファイル自体は独立した存在なのですから、デリミタが不安な時は、実際のテキストファイルを、Open [File] For Input As ~なでど一行目を読んで、それで決定するしかないのではないでしょうか?簡単なロジックで済むと思います。 「,」「;」混じりの時は、どちらにするか決定するダイアログをつけてもよいと思いますが。

mm44
質問者

お礼

ご回答ありがとうございます。 たしかにおっしゃるとおりですね。 ヘッダ行の区切り文字を読み取ることで、そのファイルで使用されている区切り文字を判別することはできそうです。 ですが今回のプログラムはExcelとの連携を想定しており、また仕様をできるだけ単純化しておきたいので判別処理は行わず、ロケール設定に基本的に従う形にしようかと思います。

その他の回答 (4)

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.5

#3の LOCALE_SLIST &HC 区切り記号 ですが、EXCELの区切り文字とは関係ないようです。 すいません。 私も、#4さんの方法が良いかと思います。 ";"区切りのファイルを作成するのはいいですが、 LOCALEの設定の違うPCで読むと読めませんし、 同一PCでも変更されてしまうと、正しく読めなくなり ます。 同じことはDDEでも起こります。 日本のサーバーで開発・運用をし、各国でクライアント をばら撒くと、EXCELにDDEでデータを送るとLOCALEの 設定に影響されます。 日付もLOCALEの設定に影響されます。

mm44
質問者

お礼

おっしゃることは分かります。 が、ロケール設定が変更されたら…というようなことを言い出したらキリがありません。

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.3

すいません。#2は間違いです。 http://www.galliver.co.jp/writing/msdn/msdn14/ に LOCALE_SLIST &HC 区切り記号 がのっています。 TEST機の設定を変えるのを忘れていましたが、 コンパネで変更すると、CSVが;で区切られました。

mm44
質問者

お礼

ご回答ありがとうございます。 あれからこちらでもいろいろ試してみたのですが、基本的にExcelは区切り記号の設定に従うようですね。 ただ具体的な話をすると、スペイン語設定では小数点記号、区切り記号ともにカンマが設定されているとのことで、この設定にした場合、Excelは小数点記号をカンマ、区切り記号をセミコロンとしてCSVファイルを出力します。 おそらく小数点記号と区切り記号が同じ場合はロケール設定を無視し、区切り記号として別の文字使用する、というExcelの仕様なんですね(マイクロソフトに確認を取ったわけではないです)。 なのでプログラム上は、基本的にはロケール設定に従う形にしようかと思います。ただし小数点、区切り記号がともにカンマの場合はロケール設定には従わず、区切り記号をセミコロンとして例外的に処理する形を考えています(このロジックで処理できないロケール設定があるようならその時また考えます)。

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.2

>CSVファイルの区切り文字の設定は取得できないように思います 私もそう思います。 小数点の記号を取得して、「,(カンマ)」なら「;(セミコロン)」 というようにロジックを組んではいかがでしょう? 開発元ではないので、確かなことはいえませんが、 「,(カンマ)」なら「;(セミコロン)」というのは EXCEL固有の機能だと思います。 CSVについて http://hp.vector.co.jp/authors/VA019702/csharp/cs011.html CSVの規格はあるのか分かりませんが、MSも基本的には 「,(カンマ)」があれば「”(ダブルクオテーション)」 で囲むと記述しています。 ちなみにtest.csvでファイルを作成してメモ帳で abc;111;123456,456;aaa;05/05/05 ccccc;000;0,123456789;a0a;01:01:01 を貼り付けてみてください。 ダブルクリックをすると、「,(カンマ)」で区切られます。 「;(セミコロン)」で区切るには、textの読み込みで 手で操作するなどする必要がありそうです。 このあたりからも、OSの範疇でないと考えられます。

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.1
mm44
質問者

補足

早速のご回答ありがとうございます。 お教えいただいた方法ですが、 NumberFormatInfoクラスでも、GetLocaleInfo()APIでもCSVファイルの区切り文字の設定は取得できないように思います(質問に書き忘れてましたが、GetLocaleInfo()は事前に調査済みでした)。 ひょっとしてWindowsのロケール設定には存在せず、ExcelのCSV出力仕様として「小数点記号がカンマのときはセミコロン区切り」と言うものが存在するということなのでしょうか…?

関連するQ&A