Excelに値を文字列として解釈させるためのコンマ区切りCSVのフォーマット


64

Excelが値を文字列として解釈し、それらを数値や日付に変換しようとしないように、CSVファイルを出力する方法を見つけようとしてしばらく探していました。

例えば:

"141", "10/11/2002", "350.00", "1311742251"

Excelは、これらすべてをネイティブの日付/数値形式に「インテリジェントに」変換しようとします。それを回避する方法はありますか?


編集:混乱して申し訳ありませんが、私の質問の意図を明確にしました。

回答:


67

ソースデータを制御できるユーザーの場合、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に感謝します!)


素晴らしい、データを変更するだけです。ため息
高価な

4
それ"=""123"""以外の場合、最後の列は不適切な形式である必要があります。を含むフィールドは"区切る必要があり"、フィールド内のsは他"のsでエスケープされます。
DMA57361

@ DMA57361の実際の使い方は問題ありません。その横にある他の2つのフィールドに、先頭に追加された等号がありません。彼がそこに置いたのは、そのセルの数式を設定して文字列を返すことです。これも回避するには、セルのデータ型を「テキスト」に設定します。
ブレークスルー

2
@Breakthroughは、Excelのフィールドではなく CSVファイルを表してます。最後の値="123"は、フィールドまたはフィールド" 正しく区切らずにフィールド区切り文字が含まれているため、有効なCSVフィールドではありません。Excelがたまたま数式を数式として読み取るのは、Excelだけであり、CSVファイルとは関係ありません。
DMA57361

2
@PriceChild、私の最初の質問のポイント(私はあまりよく説明していませんでした)は、実際にCSVをフォーマットして、ユーザーができるだけ簡単にする方法でした。そして、これは私が自分自身を見つけて投稿したかった答えです。DMA57361は実際に有益な修正ももたらしました、ありがとう!
サイモンイースト

36

多くの人がそうであるように、私はMicrosoftが下したさまざまな解決策を試し、同じ決定に苦労してきました。

Excel 2007の場合は次のとおりです。

  • すべての値を二重引用符で囲むことは役に立ちません
  • パッティング=ダブルquutesでそれらを入れた後、すべての値の前にすると、ヘルプがんが、他のほとんどのアプリケーションのために役に立たないcsvファイルを作ります
  • すべての値を囲む二重引用符を括弧で囲むのは無意味です
  • 二重引用符で囲む前にすべての値の前にスペースを入れると、日付への変換はできませんが、先頭または末尾のゼロのトリミングはできません。
  • 値の前に一重引用符を付けることは、Excel内にデータを入力する場合にのみ機能します。

しかしながら:

二重引用符を囲む前にすべての値の前にタブを置くと、日付への変換が防止され、先頭または末尾のゼロのトリミングが防止され、シートは各セルの左上隅に厄介な警告マーカーさえ表示しません。

例えば:

"<tab character><some value>","<tab character><some other value>"

タブ文字は二重引用符で囲む必要があることに注意してください。編集:二重引用符は不要です。

csvファイルをダブルクリックすると、Excelでスプレッドシートとしてファイルを開くことができ、テキストデータのように、上記のように扱われるすべての値が表示されます。「。」を使用するようにExcelを設定してくださいcsvファイルの「、」またはすべての行ではなく小数点として、各行の最初のセルに1つのテキストとして表示されます。どうやらMicrosoftは、CSVが「小数点ではなく」区切り値を意味すると考えているようです。


このタブトリックは私の時間を節約し、Excelは本当に長い数値を数値に変換し、15日以降すべての数字を失いました。Excelでタブプレフィックス付きのテキストとして処理できるようにしました。したがって、日付だけでなく数字でも機能します。
マルクスユレラ

これは本当に便利です、ありがとう!
フラビオ

22

Excelのインポート機能を使用すると、各列を解釈する形式(自動、テキスト、または日付)を指定でき、データファイルを変更する必要はありません。

あなたはとしてそれを見つけることができますDataGet External DataFrom Textエクセル2007/2010インチ
またはDataImport External DataImport Dataエクセル2003インチ

以下は、与えられたデータ例で動作しているExcel 2003テキストインポートウィザードの画像です。後者の2つの列をテキストとしてインポートしています。

Excel 2003:ステップ3のテキストインポートウィザード-データ型


DMA57361の優れた回答、すべての詳細に感謝します。私が質問で本当に言及しなかったのは、データをExcelにエクスポートするスクリプトを書いているということです。そのため、このような混乱するオプションをユーザーが飛び越えないようにしようとしていました。しかし、とにかくあなたを投票しました。:-)
サイモンイースト

@サイモン、あなたは何でスクリプトを書いていますか?中間形式を経由せずに、実際のExcelファイルを直接生成する方法はありますか?
DMA57361

データベーステーブルをエクスポートするPHPスクリプトです。CSVはおそらく最も簡単に作業できますが、あなたは正しいです、私はおそらくいくつかのオープンソースコードの助けを借りてXLSを作成するか、過去の経験から私がExcelで妥当な結果を生み出すと思うHTMLテーブルさえ作成できました(色やフォーマットなどがありますが、データ型についてはわかりません)。
サイモンイースト

1
PHP→Excelについては、SOに関するいくつかの質問があります。最初に試したいくつかの質問には、PHP Excelを指す回答がありますので、一見の価値があります。
DMA57361

それは非常に役立ちます。かなり多くの回答を読んだ後
greg121

1

サイモンの例は私には役に立たなかったし、言語の違いだと思う。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,=""

ご覧のように、出力ファイルの形式は、Visual Basicの規則では="VALUE",ない"=""VALUE""",可能性があります。

Excel 2010を使用しています。ちなみに、Googleスプレッドシートはこの方法でフォーマットされたファイルを開いたり変換したりしません。このように等号を削除すると機能し"VALUE",ます。Excelはファイルを開きますが、列を文字列にしたいという事実を無視します。


-2

Excelに日付をテキストとして解釈させる簡単な方法は、次のように完全引用符を使用する代わりに、日付の前に単一引用符を付けることです。

'10 / 11/2002

CSVを開くのではなくインポートできる場合は、各列の形式をExcelに指示できます。私が尋ねたこの質問を見てください。


5
これは、ExcelにインポートされるCSVファイルで機能しないため、ダウン投票されました。Excelは引用をリテラル引用として解釈するため、セルに表示します。
サイノット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.