587

Excelが日付に変換しようとしないように、特定のフィールドのcsvに追加できるトークンがあるかどうかを知っている人はいますか?

アプリケーションから .csv ファイルを書き込もうとしていますが、値の 1 つがたまたま日付に似ているため、Excel がテキストから日付に自動的に変換しています。すべてのテキスト フィールド (日付のように見えるフィールドを含む) を二重引用符で囲んでみましたが、効果がありません。

4

36 に答える 36

380

二重引用符の前に「=」を置くと、目的が達成されることがわかりました。データを強制的にテキストにします。

例えば。="2008-10-03",="その他のテキスト"

EDIT(他の投稿によると)Jeffiekinsが指摘したExcel 2007のバグのため、 Andrewが提案したソリューションを使用する必要があります:"=""2008-10-03"""

于 2008-10-02T23:33:21.123 に答える
173

これは古い質問ですが、問題はすぐには解消されません。CSVファイルは、ほとんどのプログラミング言語から簡単に生成できます。かなり小さく、プレーンテキストエディタを使用して人間が読める形式であり、どこにでもあります。

問題は、テキストフィールドの日付だけでなく、数値もテキストから数値に変換されることです。これが問題となるいくつかの例:

  • 郵便番号/郵便番号
  • 電話番号
  • 政府ID番号

これは、1つ以上のゼロ(0)で始まる場合があり、数値に変換すると破棄されます。または、値に数学演算子と混同される可能性のある文字が含まれています(日付:/、-など)。

前述のように、「付加=」ソ​​リューションが理想的ではない可能性があると私が考えることができる2つのケースは次のとおりです。

  • ファイルがMSExcel以外のプログラムにインポートされる可能性がある場合(MS Wordのメールマージ機能が思い浮かびます)、
  • 人間の可読性が重要になる可能性がある場所。

これを回避するための私のハック

値に数値や日付以外の文字を事前に/追加すると、値はテキストとして認識され、変換されません。印刷されない文字は、表示される値を変更しないので良いでしょう。ただし、プレーンな古いスペース文字(\ s、ASCII 32)は、Excelによって切り取られ、値が変換されるため、これには機能しません。しかし、うまく機能する他のさまざまな印刷および非印刷スペース文字があります。ただし、最も簡単なのは、単純なタブ文字(\ t、ASCII 9)を追加(後に追加)することです。

このアプローチの利点:

  • キーボードから、または覚えやすいASCIIコード(9)で利用でき、
  • 輸入に煩わされることはありません、
  • 通常、メールマージの結果を気にすることはありません(テンプレートのレイアウトによって異なりますが、通常は行末に広いスペースを追加するだけです)。(ただし、これが問題になる場合は、ゼロ幅スペース(ZWSP、Unicode U + 200B)などの他の文字を確認してください。
  • メモ帳などでCSVを表示する場合、大きな障害にはなりません。
  • Excel(またはメモ帳など)で検索/置換することで削除できます。
  • CSVをインポートする必要はありませんが、ダブルクリックするだけでExcelでCSVを開くことができます。

タブを使用したくない理由がある場合は、Unicodeテーブルで他に適切なものを探してください。

別のオプション

XMLファイルを生成する場合があります。このファイルでは、特定の形式が新しいMS Excelバージョンでのインポートにも受け入れられ、.XLS形式と同様のオプションがさらに多く許可されますが、これについては経験がありません。

したがって、さまざまなオプションがあります。要件/アプリケーションによっては、一方が他方よりも優れている場合があります。


添加

新しいバージョン(2013以降)のMS Excelでは、CSVがスプレッドシート形式で開かれなくなりました。ワークフローのスピードバンプが1つ増えて、Excelの有用性が低下します...少なくとも、回避するための手順があります。たとえば、このStackoverflow:Excel2013内で.csvファイルを正しく表示する方法を 参照してください。

于 2013-02-27T08:16:41.577 に答える
104

Jarodの解決策とJeffiekinsによって提起された問題に取り組み、変更することができます

"May 16, 2011"

"=""May 16, 2011"""
于 2011-05-16T21:48:35.250 に答える
70

私は同様の問題を抱えていましたが、これは csv ファイルの内容を編集することなく私を助けた回避策です:

ファイルに ".csv" 以外の名前を付けることができる場合は、"Myfile.txt" や "Myfile.csv.txt" などの ".txt" 拡張子を付けて名前を付けることができます。それを Excel で開くと (ドラッグ アンド ドロップではなく、[ファイル] -> [開く] または [最近使用したファイル] リストを使用)、Excel は "テキスト インポート ウィザード" を提供します。

ウィザードの最初のページで、ファイルの種類として [区切り記号付き] を選択します。

ウィザードの 2 ページ目で、区切り文字として「,」を選択し、値を引用符で囲んでいる場合はテキスト修飾子も選択します。

3 ページ目で、すべての列を個別に選択し、それぞれに「一般」ではなく「テキスト」タイプを割り当てて、Excel がデータを混乱させないようにします。

これがあなたまたは同様の問題を抱えている人に役立つことを願っています!

于 2013-02-21T05:06:50.417 に答える
29

警告:Excel '07には(少なくとも)(別の)バグがあります。フィールドの内容にコンマがある場合、= "field、contents"を正しく解析せず、コンマの後のすべてを引用符に関係なく、次のフィールド。

私が見つけた唯一の回避策は、フィールドの内容にコンマが含まれている場合に=を削除することです。

これは、Excelで正確に「正しく」表現することが不可能なフィールドがあることを意味している可能性がありますが、今では誰も驚くことはないと信じています。

于 2010-12-10T19:58:59.950 に答える
24

C# で CSV ファイルに書き込む文字列を作成するときに、次のようにフォーマットする必要がありました。

"=\"" + myVariable + "\""
于 2014-04-21T13:09:04.123 に答える
17

Excel 2010 で新しいシートを開きます。[データ] リボンで、[テキストから外部データを取得] をクリックします。CSV ファイルを選択し、[開く] をクリックします。「次へ」をクリックします。「タブ」のチェックを外し、「カンマ」にチェックを入れて「次へ」をクリックします。最初の列の任意の場所をクリックします。Shift キーを押しながら、最後の列をクリックできるようになるまでスライダをドラッグし、Shift キーを放します。「テキスト」ラジオボタンをクリックしてから、「完了」をクリックします

CSV ファイルの場合と同様に、すべての列がテキストとしてインポートされます。

于 2014-02-06T21:15:58.137 に答える
11

これは、最初にcsvファイルを生成するときにここで使用する簡単な方法です。値が少し変更されるため、すべてのアプリケーションに適しているわけではありません。

csv内のすべての値の前にスペースを追加します

このスペースは、「1」、「2.3」、「-2.9e4」などの数値からExcelで削除されますが、「01/10/1993」や「TRUE」などのブール値のままになり、変換されなくなります。 Excelの内部データ型。

また、読み込み時に二重引用符が圧縮されるのを防ぐため、「3.1415」のようなテキストを二重引用符で囲み、文字列全体の前にスペースを追加する場合でも、Excelでテキストを変更しないようにするための確実な方法はありません。つまり(一重引用符を使用して入力内容を示します)'"3.1415"'。次に、Excelでは常に元の文字列がありますが、二重引用符で囲まれ、スペースが前に付いているため、数式などでそれらを考慮する必要があります。

于 2013-01-28T18:05:52.803 に答える
8

(Excel 2003 を想定しています...)

Text-to-Columns Wizard を使用する場合、手順 3 で各列のデータ型を指定できます。プレビューで列をクリックし、動作が正しくない列を「一般」から「テキスト」に変更します。

于 2008-10-02T23:34:08.877 に答える
8

これは、ファイル自体をいじることなくこれを達成する方法を私が知っている唯一の方法です。Excel の場合と同様に、私は何時間も机の上で頭を打ちながら、これを学びました。

.csv ファイル拡張子を .txt に変更します。これにより、ファイルを開いたときに Excel がファイルを自動変換しなくなります。これが私が行う方法です: Excel を開いて空白のワークシートを開き、空白のシートを閉じてから、[ファイル] => [開く] を選択し、拡張子が .txt のファイルを選択します。これにより、Excel は強制的に "テキスト インポート ウィザード" を開き、ファイルをどのように解釈するかについて質問します。最初に区切り文字 (コンマ、タブなど) を選択し、次に (ここが重要な部分です) 列のセットの列を選択し、書式設定を選択します。ファイルの内容を正確に知りたい場合は、[テキスト] を選択すると、Excel は区切り記号の間にあるものだけを表示します。

于 2013-08-27T15:08:03.963 に答える
5

この同じ問題に対して私が行ったことは、Excel でファイルを開く前に、各 csv 値の前に "=""" を追加し、各 CSV 値の後に二重引用符を 1 つ追加することでした。たとえば、次の値を使用します。

012345,00198475

これらは、Excel で開く前に次のように変更する必要があります。

"="""012345","="""00198475"

これを行うと、すべてのセル値が Excel の数式として表示されるため、数値や日付などの形式にはなりません。たとえば、012345 の値は次のように表示されます。

="012345"
于 2015-12-08T01:12:13.523 に答える
4

今週、私はこのコンベンションに出くわしました。これは優れたアプローチのようですが、どこにも参照されていません。誰かがそれに精通していますか?ソースを引用できますか?私は何時間も探していませんが、誰かがこのアプローチを認識してくれることを願っています.

例 1: =("012345678905") は012345678905と表示されます

例 2: =("1954-12-12") は、12/12/1954ではなく1954-12-12として表示されます。

于 2013-06-13T00:34:45.197 に答える
4

こんにちは、私は同じ問題を抱えています。

この vbscipt を記述して、別の CSV ファイルを作成します。新しい CSV ファイルは、各フィールドのフォントにスペースが入るため、Excel はテキストとして認識します。

したがって、以下のコード (たとえば、Modify_CSV.vbs) を使用して .vbs ファイルを作成し、保存して閉じます。元のファイルを vbscript ファイルにドラッグ アンド ドロップします。同じ場所にファイル名に「SPACE_ADDED」を付けた新しいファイルを作成します。

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing
于 2014-02-20T06:37:30.767 に答える
2

エクセルではありません。Windows は数式、データを日付として認識し、オートコレクトします。Windows の設定を変更する必要があります。

「コントロール パネル」(->「クラシック ビューに切り替え」)->「地域と言語のオプション」->「地域のオプション」タブ->「カスタマイズ...」->「番号」タブ->次に記号を変更します。あなたが望むものに従って。

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

たとえば顧客のコンピュータでこれらの設定が変更されていない場合、データの代わりに日付が表示されます。

于 2014-05-08T11:51:32.437 に答える
2

私の場合、Rで生成したcsvファイルの「Sept8」がExcel 2013で「8-Sept」に変換されてしまいました。xlsxパッケージのwrite.xlsx2()関数を使ってxlsx形式の出力ファイルを生成することで解決しました。不要な変換なしで Excel で読み込むことができます。したがって、csv ファイルが与えられた場合は、R に読み込んで、write.xlsx2() 関数を使用して xlsx に変換してみてください。

于 2016-02-29T02:43:30.000 に答える
1

最も簡単な解決策 今日、これを理解しました。

  • ワードで開く
  • すべてのハイフンを en ダッシュに置き換えます
  • 保存して閉じます
  • エクセルで開く

編集が完了したら、Word でいつでも開いて、en ダッシュを再びハイフンに置き換えることができます。

于 2015-08-12T15:10:26.337 に答える
1

Google ドライブ (Mac の場合は Numbers) を使用した回避策:

  1. Excelでデータを開く
  2. 不正なデータを含む列の形式をテキストに設定します ([形式] > [セル] > [数値] > [テキスト])。
  3. .csv を Google ドライブに読み込み、Google スプレッドシートで開きます
  4. 問題のある列をコピーします
  5. 列をテキストとして Excel に貼り付けます ([編集] > [形式を選択して貼り付け] > [テキスト])。

ステップ 3 で Mac を使用している場合は、Numbers でデータを開くこともできます。

于 2017-12-19T22:00:59.487 に答える
0

この問題は、Mac Office 2011 および Office 2013 にも存在します。発生を防ぐことはできません。そんな基本的なことのようです。

私の場合、CSV 内に "1 - 2" や "7 - 12" などの値があり、逆コンマで正しく囲まれていました。これは Excel 内の日付に自動的に変換されます。後でプレーン テキストに変換しようとすると、 43768 などの日付の数値表現。さらに、バーコードや EAN 番号で見つかった大きな数値を 123E+ の数値に再フォーマットしますが、これは元に戻すことはできません。

Google ドライブの Google スプレッドシートで数値が日付に変換されないことがわかりました。バーコードには 3 文字ごとにコンマがありますが、これらは簡単に削除できます。特にMAC / Windows CSVを扱う場合、CSVを非常にうまく処理します。

いつか誰かを救うかもしれない。

于 2015-05-21T10:45:48.733 に答える
0

数値を貼り付ける前に、基本的に出力範囲をテキストとしてフォーマットするこの VBA マクロを作成しました。Excel が日付として解釈せずに、8/11、23/6、1/3 などの値を貼り付けたい場合に、これは完璧に機能します。

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup
    
Columns(ActiveCell.Column).NumberFormat = "@"
    
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

これが他の人にも当てはまるかどうか、私は非常に興味があります。私はしばらくの間、この問題の解決策を探していましたが'、入力テキストの前に挿入することを含まない簡単な VBA ソリューションを見たことがありません。このコードは、データを元の形式で保持します。

于 2017-09-17T16:04:02.703 に答える
-1

別の方法:

変更したい列のフォーマットを「テキスト」に変換します。保持、コピーするすべてのセルを選択します。これらの列の選択を解除せずに、[編集] > [形式を選択して貼り付け] > [値として] をクリックします。

CSV として保存します。セル形式は CSV ファイルに保存できないため、ファイルを再度開くと日付としてフォーマットされるため、これはファイルに対して最後に行う必要があることに注意してください。

于 2008-10-02T23:43:02.067 に答える
-1

表をワードに貼り付けます。検索/置換を実行し、すべての - (ダッシュ) を -- (二重ダッシュ) に変更します。コピーしてエクセルに貼り付けます。他の記号 (/) などについても同じことができます。Excel で一度ダッシュに戻す必要がある場合は、列をテキストにフォーマットしてから、変更を加えます。お役に立てれば。

于 2015-10-24T19:46:00.230 に答える
-2

フィールドの先頭に逆コンマを置くと、テキストとして解釈されます。

例: 25/12/2008なる'25/12/2008

インポート時にフィールド タイプを選択することもできます。

于 2008-10-02T23:33:00.547 に答える
-4
SELECT CONCAT('\'',NOW(),'\''), firstname, lastname 
FROM your_table
INTO OUTFILE 'export.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '\"' 
LINES TERMINATED BY '\n'
于 2011-02-24T08:10:04.973 に答える
-5

CSV - カンマ区切りの値。xls/xlsx/exel ではなく、テキスト エディターで作成/編集するだけです。編集では、必要な形式で日付を設定できますが、そのままにしておく必要があります。これは、同じファイルがプログラムで処理されることを前提としています。

于 2013-05-03T05:55:30.500 に答える