1. ホーム
  2. excel

[解決済み] Excel用CSVファイルの生成、値の中に改行を入れるには?

2022-04-23 15:48:56

質問

Excel用のファイルを作成する必要があるのですが、このファイルには複数の行を含む値があります。

また、非英語のテキストが含まれているため、ファイルはユニコードでなければなりません。

今、生成しているファイルはこんな感じです。(UTF8で、英語以外のテキストが混在しており、行数も多い)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"

複数行の値は二重引用符で囲まれ、その中に通常の日常的な改行があることに注意してください。

Webで調べたところでは、これはうまくいくはずなのですが、少なくともExcel 2007とUTF8ファイルではうまくいきません。Excelは、3行目を最初のデータ行の2行目としてではなく、2行目のデータとして扱います。

これは顧客のマシンで実行する必要があり、私は顧客のExcelのバージョンを制御できないので、Excel 2000以降で動作するソリューションが必要です。

ありがとうございます。

EDIT: 2つのCSVオプション、1つはExcel用(ユニコード、タブ区切り、フィールドに改行なし)、もう1つはそれ以外用(UTF8、標準CSV)にして、私の問題を解決した""。

私が探していたものではありませんが、少なくとも(今のところ)うまくいっています。

解決方法は?

フィールドの先頭にスペースを入れるのは、そのスペースがデータの一部である場合のみです。Excelでは、先頭のスペースは削除されません。そのため、見出しやデータフィールドに不要なスペースが発生します。さらに悪いことに " が、フィールドの開始位置でないために無視されます。

ファイルに非ASCII文字(UTF-8でエンコードされている)がある場合、UTF-8のBOM(3バイト。 hex EF BB BF ) をファイルの先頭に置いてください。そうしないと、Excel はデータを utf-8 ではなく、あなたのロケールのデフォルトエンコーディング (例: cp1252) に従って解釈し、非 ASCII 文字はゴミになってしまいます。

以下のコメントはExcel 2003、2007、2013に適用されます。Excel 2000ではテストしていません。

Windowsのエクスプローラでファイル名をダブルクリックして開くと、すべて問題なく動作します。

Excel内から開くと、結果はさまざまです。

  1. ファイルにASCII文字しかない(BOMもない):動作します。
  2. ファイルに非ASCII文字(UTF-8でエンコードされている)があり、先頭にUTF-8のBOMがある場合:データがUTF-8でエンコードされていることは認識されますが、csv拡張子は無視されます。 テキストインポートウィザード その結果、残念ながら改行の問題が発生します。

オプションは以下の通りです。

  1. Excelからファイルを開かないようにユーザーを訓練する :-)
  2. XLSファイルを直接書くことを検討してください ... Python/Perl/PHP/.NET/etc でそれを行うためのパッケージ/ライブラリが利用可能です。