Excelに値を文字列として解釈させ、それらを数値や日付に変換させないようにする方法でCSVファイルを出力する方法を見つけようと、しばらく探していました。
例えば。:
"141", "10/11/2002", "350.00", "1311742251"
Excelは、これらすべてをネイティブの日付/数値形式に「インテリジェントに」変換しようとします。それを回避する方法はありますか?
編集:私の質問の意図をはっきりさせ、混乱して申し訳ありません。
ソースデータを管理している人のために、CSVカラムがこのフォーマットでない限り、ExcelはCSVフィールドのフォーマットを自動検出します。
"=""Data Here"""
例えば...
20, 5.5%, "0404 123 351", "3-6", "=""123"""
[number] [percent] [number] [date] [string] <-- how Excel interprets
Googleスプレッドシートでも機能しますが、他のスプレッドシートアプリがこの表記をサポートしているかどうかはわかりません。
データ自体に引用符が含まれていると思われる場合は、次のように二重エスケープする必要があります。
"=""She said """"Hello"""" to him"""
(編集:訂正を加えて更新、ありがとうDMA57361!)
多くの人と同様に、私はマイクロソフトが下すのと同じ決定に苦労しており、提案されたさまざまな解決策を試してみました。
Excel 2007の場合、次のようになります。
しかしながら:
二重引用符を囲む前にすべての値の前にタブを配置すると、日付への変換が妨げられ、先頭または末尾のゼロのトリミングが妨げられ、各セルの左上隅に厄介な警告マーカーも表示されません。
例えば。:
"<tab character><some value>","<tab character><some other value>"
タブ文字は二重引用符で囲む必要があります。編集:それは二重引用符も必要ではないことがわかった。
Csvファイルをダブルクリックすると、テキストデータのように、上記のように扱われるすべての値を示すスプレッドシートとしてExcelでファイルを開くことができます。 Excelで、 '。'を小数点として使用し、 '、'またはすべての行ではないように設定してください。 CSVファイルは、各行の最初のセルに1つのテキストとして表示されます。どうやらマイクロソフトは、CSVは「小数点ではない」という分離値を意味すると考えています。
Excelのインポート機能を使用すると、各列を解釈する形式(自動、テキスト、または日付)を指定できます。データファイルを変更する必要はありません。
Excel 2007/2010ではData
→Get External Data
→From Text
として見つけることができます。
またはExcel 2003ではData
→Import External Data
→Import Data
です。
これは、与えられたサンプルデータに対して実行中のExcel 2003のテキストインポートWizardの画像です。後者の2列をテキストとしてインポートしたところです。
Simonからの例は私にはうまくいきませんでした、そしてそれは言語の違いであると思います。 C#では、これが私の作業フォーマット文字列のようになります。
var linebreak = (i++ == list.Count) ? "" : "\r\n";
csv += String.Format("=\"{0}\",{1},{2},{3},=\"{4}\"{5}",
item.Value, item.Status, item.NewStatus, item.Carrier, c.Status, linebreak);
これが出力ファイルの外観です。
="abababababab",INVALID,INVALID,USPS,="",
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9500100030492359000149",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793482982812",UNKNOWNSTATUS,DELIVERED,USPS,="3"
="9400110200793000216184",UNKNOWNSTATUS,INVALID,USPS,=""
見てわかるように、出力ファイルのフォーマットは="VALUE",
ではなく"=""VALUE""",
で、これはVisual Basicの慣習かもしれないと思います。
私はExcel 2010を使用しています。ちなみに、Google Sheetsはこのようにフォーマットされたファイルを開いたり変換したりすることはしません。等号を削除して"VALUE",
- Excelはファイルを開きますが、列を文字列にしたいという事実は無視します。