Excelが特定のテキスト値を日付に自動的に変換しないようにする


526

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

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


120
ええ、ユーザー名が10000のファイルに「april25」などのファイルがあり、日付に変換され、最終的に「apr-25」として処理されて、「username not found」エラーが発生した場合と同様です。 Excelが単一の値を日付に変換し、残りのテキストは残して4000レコードをファイルに変換することを期待します。どのCSV読み取りコードが不十分ですか?本当に、最初のXレコードに基づいてタイプを推測し、それに固執するのではないですか?または、すべてテキストのままにします。「一般」としてフォーマットしたい場合は、後で選択できます。最初から「一般的」であると想定すると、テキストデータが破損するおそれがあります。
Triynko

コピーと貼り付けを行うときに問題が発生しました。すべてのソリューションを検索するには、ターゲット列を選択し、それを文字列/テキスト形式に設定してから、ソースをコピーし、「値のみ」で特別な貼り付け(右クリック)を実行します。値を保持しますが、日付のフォーマットは行いません。
Kai Noack

84
このExcelの動作は重大な欠陥であると考えていることを付け加えておきます。Excelにインポートする前にcsvファイルの内容を変更する余裕がないすべての人はどうですか?または、CSVファイルに他の多くの変更を加えるまでこの問題に気づかない人はどうですか?ExcelでCSVファイルを操作するのは面倒です。
robguinness 2013年

DatatableJSを使用していますか?私はすでにそのAPIでこれを行う方法を知っているからです。これが必要な場合は、ここで見つけることができます。stackoverflow.com
Richard Rebeco

11
ファイル->開く->インポートを使用するこれらすべてのソリューションは、私たちが何をしているのかわかっているので問題なく動作しますが、/ within /からのファイルシステムのナビゲートを理解していない世界の他の99.5%応用。彼らはファイルを見て、それを使用するにはダブルクリックします。私は25年間、オフィスアプリケーションの使用方法を説明し、オフィスアプリケーションのデータを生成するコードを記述してきました。/application/を使用して使用するファイルを探すのは、ほとんど誰もが不可能です。
user2624417 2017年

回答:


355

二重引用符の前に '='を置くと、目的の結果が得られることがわかりました。データを強制的にテキストにします。

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

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


12
1)私のcsvファイルはExcelでのみ使用され、2)これはアカウンティングのためのものであり、最初に 'を付けることはできません。3)実行する必要がないので、この回答を受け入れます。インポート。私は彼らにcsvを開いてほしいだけです。

5
すごい!ただし、Excel 2007のバグのため、Andrewによって提案されソリューションを使用してください"=""2008-10-03"""。投稿を更新しました。
TMS

1
Excel 2010では、テキストが長すぎる場合、これは機能しません:(
steve

7
これが機能する理由は、Excelが文字「=」を見つけると、それに続く式を評価することを決定するためです。この場合、式は単なる文字列リテラルであり、文字列リテラルの値は文字列の内容です。したがって、引用符は魔法のように消えます。= 1 + 2 + 3を入力して、CSVインポート後に値6を取得できます。数式自体はインポートプロセスで破棄されません。
lokori 2014年

4
このアプローチの大きな問題があります-あなたは、これらすべての「消えエクセルや編集中のファイルを開き、保存して再度開いた場合
ACV

150

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

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

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

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

前述のように、 "prepending ="ソリューションが理想的ない可能性があると考えることができる2つのケースは、

  • ファイルがMS Excel以外のプログラムにインポートされる可能性がある場合(MS Wordの差し込み印刷機能が思い浮かびます)、
  • 人間が読みやすいことが重要な場合があります。

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

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

このアプローチの利点:

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

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

別のオプション

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

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


添加

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


6
私は\t分離文字に追加した後に正しい先行ゼロを取得しました;... MS Officeくそー、どうしてこれを理解するのに2分以上かかるのですか?
Morten Jensen、

2
すべての値の最後に\ tを追加することは、確かにトリックです。これはハックの回避策ですが、実際には問題なく動作します。前者は他のツールでの作業が難しい場合があるため、等しい「=」を使用した式のトリックよりもこれを好みます。
オコケット

3
感謝の気持ちを表す十分な賛成票はありません。notepad ++での検索と置換 '、'から '\ t、\ t'(最初と最後の列にも対応するため)は魅力のように機能します。ありがとう。
Asaf

1
MySQLクエリ(PHPによるCSV出力用)では、CONCAT( '\ t'、column_name)を使用しました。トリックも行いました。ありがとう!
Just Plain High

1
いい案。残念ながら、NumbersはExcelよりも少し "スマート"で、タブトリックに該当しません。私が思いつくことができる最良の代替案はリーディングです'。それはよく理解されており、あまり邪魔にならないからです...しかし、見えないほうが良いでしょう。
ヒースラフター

101

Jarodの解決策とJeffiekinsによって提起された問題に基づいて作業すると、変更できます

"May 16, 2011"

"=""May 16, 2011"""

6
テキストが特定の長さよりも長い場合、Excel 2010では機能しません。
スティーブは2014年

1
@Andrew、この「修正」は"、日付の間にどこかに値が必要な場合に問題を引き起こします。
Pacerier

8
FYI、あなたがExcelファイルを保存する場合は=離れて、あなた振り出しに戻っているあなたがで開く次の時間になります。
D512

私の経験はsteveにもd512にも一致しません。Excel 2013の受信.csvで動作し、.xlsxとして保存した後は元に戻りません。このデータ行を使用して誰でも簡単にテストできる: "806676"、 "None"、 "41"、 "=" "2011年5月16日" ""、 "100.00"、 "False"
tbc0

1
@ tbc0 "806676","None","41","=""05-16-2011""","100.00","False"代わりに試してください。ハイフン付きのテキストが保存と再読み込みで失われます。
NetMage

65

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

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

ウィザードの最初のページで、ファイルタイプとして[区切り]を選択します。

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

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

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


2
ああ、ところで私はこれを初めて発見したわけではありません。 risingline.com/use-excel-read-csv-without-reformatting.php このWebページには、ウィザードの3ページ目の列をShiftキーを押しながらクリックして、各タイプを割り当てる前にそれらをすべて一緒に選択できるという役立つ説明もあります。 "テキスト"。
rainerbit 2013

これは日付値に対しては機能しますが、Excelが数値として解釈するものに対しては機能しないようです。文字列がすべて数字とコンマの場合、「テキスト」形式は科学的数値形式になります。
マイケル-2017

3
これは私にとっては完璧に機能し、ファイル名を.txtに変更する以外はファイルを変更する必要はありませんでした。ありがとうございました。
ケビン

1
残念ながら、Excelでは、最初の6列に対してのみこれを行うことができます。さらに必要な場合は、csvの内容をコピーし、Excelファイルを作成して空にし、すべての列/行を選択してタイプをテキストに設定し、内容を貼り付けてデータ| 列へのテキスト
nachocab

これは最良のソリューションであり、答えとしてマークする必要があります。
ロブ

28

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

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

これは、Excelで正確に「正しい」と表現できないフィールドがあることを意味しているかもしれませんが、今では誰も驚かないと信じています。


これをExcel 2007でテストしたところ、正しく動作しました。ただし、引用符の前にスペースがあると、カンマが正しく解析されません。
Sunny88 2012年

8
これはRFC 4180によるとバグではないようです。フィールドを引用する正しい方法は、フィールド全体を引用してから内部引用符を二重引用することです。したがって、「= "" field、content "" " tools.ietf.org/html/rfc4180
Peter Stephens

2
@PeterStephens、これfield, content"中にある場合、これは機能しません。例"=""field, co""ntent"""
Pacerier、

1
@Pacerierおそらく、埋め込まれた引用は二重引用符で囲まれ、に変換される必要があり""""ます。
ErikE 2015年

@ErikEの提案が正しいことを確認できます。値を持つフィールドの場合は1"2場合、あなたは(同じようになり、それを残すとは対照的に、このトリックを使用することを選択した"1""2"ファイルの中- Excelがすでにテキストとしてで扱われているでしょう)、その後、エクセル標的CSVファイルの最後の正しい文字列が終わりますであること"=""1""""2"""
Tao

22

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

"=\"" + myVariable + "\""

2
これはRailsでも私に起こされました。ありがとう
Vieenay Siingh 16年

3
Javaでも動作
Shoyo

Papa Parseを使用してJavaScriptで私のために働いた。
wobsoriano

17

2018年

私のために(そしてCSVを変更することなく)機能した唯一の適切な解決策。

Excel 2010:

  1. 新しいワークブックを作成
  2. データ>テキストから> CSVファイルを選択
  3. ポップアップで[区切り]ラジオボタンを選択し、[次へ>]をクリックします。
  4. 区切り記号のチェックボックス:「カンマ」のみにチェックを入れ、他のオプションのチェックを外し、「次へ>」をクリックします
  5. [データプレビュー]で右端までスクロールし、Shiftキーを押しながら最後の列をクリックします(すべての列が選択されます)。「列データ形式」でラジオボタン「テキスト」を選択し、「完了」をクリックします。

Excel office365:(クライアントバージョン)

  1. 新しいワークブックを作成
  2. データ>テキスト/ CSVから> CSVファイルを選択
  3. データ型の検出>検出しない

注: Excel office365(webバージョン)、私がこれを書いているので、あなたはそれを行うことができません。


3
これはCSVファイルを事前に変更することなく機能するので、これが正解だと思います。
ジャック

これは正解のようです。期待は高かった。しかし、MacOS(office365)では、すべての列を選択することはできません。テキストインポートウィザードに表示されるプレビューウィンドウには水平スクロールがなく、表示されている列しか選択できません。ショートカット(CMD + Aなど)を試しましたが、役に立ちませんでした。「検出しない」オプションも存在しません。私は荒廃しています。
normanius

Excel Office 365で、[ファイル]、[オプション]、[データ]を選択します。必要に応じて、レガシーデータインポートウィザードを表示するチェックボックスがあります。
カートシュルツ

15

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

すべての列は、CSVファイルと同じようにテキストとしてインポートされます。


1
私は同じ問題に遭遇しましたが、@ Robの指示に注意深く従うと完璧に動作します!。ありがとう
ミラカイ14年

2
テキストからのデータアシスタントは、残念ながら複数行のセルをサポートしていません。このような複数行のテキストが検出されると、最初の行以降のすべての行が新しい行に書き込まれ、インポート全体が中断されます。ダブルクリックしてCSVファイルを開いた場合のみ、改行が正しく解釈されます。くそーマイクロソフト...
CodeManX 2016年

1
残念ながら、これはExcelのランダムなフォーマットの「ヘルプ」の問題を解決しません- テキスト DEC1は、まだDec-01の日付に変更されています。YYYY-MM-DDのテキストがDD / MM / YYYYに切り替えられるのと同じです。:(
バラカス

12

Microsoft Office 2016リリースの問題はまだ残っており、MARC1、MARCH1、SEPT1などの遺伝子名を操作している私たちにとってはやや不安になります。次に、Excelユーザーで開いたり、共有したりします。

  1. CSVファイルをテキストとして開く(メモ帳)
  2. コピーします(ctrl + a、ctrl + c)。
  3. 新しいExcelシートに貼り付けます-長いテキスト文字列としてすべて1列に貼り付けます。
  4. この列を選択してください。
  5. データに移動-「テキストを列に...」、開いたウィンドウで「区切り」(次へ)を選択します。「カンマ」がマークされていることを確認します(マークを付けると、下の列へのデータの分離が表示されます)(次へ)。このウィンドウで、目的の列を選択し、(一般ではなく)テキストとしてマークできます(完了)。

HTH


手作業も私にとって魅力的ではありませんでした。しかし、あらゆる可能性を使い果たした後、これが最も堅牢で信頼性の高いものでした。
Ana Maria Mendes-Pereira 2016年

それでもバッチ処理。
メンデスペレイラ

これは実際には、作業量が最小限で済む最良の回答です。ファイルを解析しないように強制するオプションを設定できるといいのですが。
2016年

すべてのカンマをタブで置き換えることもできます。その後、自動で削除されます
ロール

10

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

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

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

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


これでうまくいきました。自動で日付に変換される1-1-1のような値がありました。言及したように、スペースは移動するので値が変更されますが、解析時にそれを取り除きますので、私にとっては大したことではありません。
ジャックリン2013年

スペースは、日付の解釈や先行ゼロの除去を防ぐために機能しなくなりました。ただし、"\xA0"代わりに非改行スペースを使用できます。これでうまくいきます。
Doin

8

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

Text-to-Columnsウィザードを使用する場合、ステップ3で各列のデータ型を指定できます。プレビューの列をクリックし、誤動作している列を「一般」から「テキスト」に変更します。


8
これは、ユーザーにインポートプロセスを強制することができる場合に最適です。

とにかく.csvにエクスポートすると、TEXT列の数値がNUMBERSに変換されるため、これは実際には問題の解決にはなりません...
Chonez

8

これは、ファイル自体に手を加えずにこれを実現する方法を知っている唯一の方法です。Excelでいつものように、私は何時間も机の上で頭を叩くことによってこれを学びました。

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


これは、2015-03-03のExcel for Mac 2011(バージョン14.4.8 150116)での作業、SO質問のデータでの作業、つまりExcelでの問題awkである日付のような値の再フォーマットを回避する上で私にとってはうまくいきました。よりawk、質問のタイトルにもかかわらず。
Jonathan Leffler、2015年

4

(EXCEL 2007以降)

ソースファイルを編集せずにExcelで日付形式を「検出」しないようにする方法

どちらか:

  • ファイルの名前を.txtに変更します
  • それができない場合は、Excelで直接CSVファイルを開く代わりに、新しいワークブックを作成してから
    Data > Get external data > From Text
    、CSVに移動して選択します。

どちらの方法でも、インポートオプションが表示されます。日付を含む各列を選択し、「一般」ではなく「テキスト」としてフォーマットするようにExcelに指示します。


4

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

012345,00198475

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

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

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

="012345"

別の方法は、csvに数値を格納すること1234500198475E-8です。この方法では、Excelでさらに計算を行うことができます。
bert bruynooghe

4

ここで提供されるソリューションはどれも良いソリューションではありません。個々のケースで機能する場合がありますが、最終的な表示を制御できる場合のみです。私の例を挙げましょう。私の仕事では、小売用に販売する製品のリストを作成しています。これはCSV形式であり、パーツコードが含まれています。一部はゼロから始まり、製造元によって設定されています(当社の管理下にはありません)。先頭のゼロを削除すると、実際に別の製品と一致する可能性があります。小売業者のお客様は、バックエンド処理プログラムのためにCSV形式のリストを必要としています。これも制御不能であり、お客様ごとに異なるため、CSVファイルの形式を変更することはできません。接頭辞「=」も追加されたタブもありません。未加工のCSVファイルのデータは正しいです。問題は、お客様がExcelでそれらのファイルを開いたときです。そして、多くの顧客は実際にはコンピュータに精通していません。メールの添付ファイルを開いて保存するだけです。2つのわずかに異なる形式でデータを提供することを考えています。1つはExcelフレンドリー(TABを追加して上記のオプションを使用する方法、もう1つは「マスター」として使用する方法)です。私たちはこれを行う必要があります。その間、スプレッドシートに「誤った」データが表示されることがある理由を説明し続けます。Microsoftが適切な変更を行うまで、エンドユーザーの制御方法がない限り、これに対する適切な解決策はありません。ファイルを使用します。しかし、なぜこれを行う必要があるのか​​を理解できない顧客もいるので、これは希望的な考えかもしれません。その間、スプレッドシートに「間違った」データが表示されることがある理由を説明し続けます。Microsoftが適切な変更を行うまで、エンドユーザーがファイルを使用する方法を制御できない限り、これに対する適切な解決策はありません。しかし、なぜこれを行う必要があるのか​​を理解できない顧客もいるので、これは希望的な考えかもしれません。その間、スプレッドシートに「間違った」データが表示されることがある理由を説明し続けます。Microsoftが適切な変更を行うまで、エンドユーザーがファイルを使用する方法を制御できない限り、これに対する適切な解決策はありません。


データの左側の余分なスペースが問題にならない場合は、データの前に"\xA0"(改行しないスペース)を追加することで、Excelの問題を修正できます。
Doin

3

私は今週、この大会に出会いました。これは優れたアプローチのようですが、どこからも参照されているとは思えません。誰か知っていますか?その出典を引用できますか?私は何時間も探していませんが、誰かがこのアプローチを認識してくれることを期待しています。

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

例2:=( "1954-12-12")は、1954-12-12として表示され、12/12/1954ではありませ


2

Excelではありません。Windowsは数式、データを日付として認識し、自動修正します。Windowsの設定を変更する必要があります。

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

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

これらの設定が変更されていない場合(顧客のコンピューターなど)は、データではなく日付が表示されます。


2

こんにちは、同じ問題があります。

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

したがって、以下のコードを使用して.vbsファイル(たとえば、Modify_CSV.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

2

csvファイルを変更しなくても、次のことができます。

  1. Excelのセルのフォーマットオプションを「テキスト」に変更します。
  2. 次に、「テキストインポートウィザード」を使用してcsvセルを定義します。
  3. インポートしたら、そのデータを削除します
  4. 次に、プレーンテキストとして貼り付けます

Excelは、CSVセルを、自動日付フォーマットを無視してフォーマットされたテキストとして適切にフォーマットおよび分離します。

ちょっとばかげた回避策のようなものですが、インポートする前にcsvデータを変更するよりも便利です。アンディベアードとリチャードは、この方法を回避できましたが、いくつかの重要なステップを逃しました。


1

これが古いスレッドであることを知っています。私のように、Powershell comオブジェクトを介してOffice 2013を使用してもこの問題が解決しない場合は、opentextメソッドを使用できます。問題は、このメソッドには多くの引数があり、それらが相互に排他的である場合があることです。この問題を解決するには、この投稿で紹介されているinvoke-namedparameterメソッドを使用できます。例は

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

残念ながら、セルに改行が含まれている場合、この方法でcsv解析が何らかの形で壊れることを発見しました。これはcsvでサポートされていますが、Microsoftの実装にはバグがあるようです。また、ドイツ語固有の文字を何とか検出しませんでした。正しい文化を与えても、この行動は変わりませんでした。すべてのファイル(csvおよびスクリプト)は、utf8エンコーディングで保存されます。まず、セルごとにcsvを挿入する次のコードを記述しました。

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

しかし、これは非常に遅いため、別の方法を探しました。どうやらExcelでは、マトリックスを使用してセルの範囲の値を設定できます。そこで、このブログのアルゴリズムを使用してcsvをマルチアレイに変換しました。

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

上記のコードをそのまま使用できます。CSVをExcelに変換する必要があります。パスをcsvと下部の区切り文字に変更するだけです。


複雑すぎます
2016年

1

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


なぜあなたの答えが反対票を投じられたのか分かりません。これは、少なくともRを使用している人には役立ちます。この答えは私に役立ちました。ありがとう:)
スリハーシャKB

1

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

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

または、手順3でMacを使用している場合は、Numbersでデータを開くことができます。


これは何も解決せずに何時間も作業するのではなく、まともな解決策です。
imsrgadich

1

(EXCEL 2016以降、実際には以前のバージョンでは試していません)

  1. 新しい空白のページを開く
  2. 「データ」タブに移動します
  3. 「テキスト/ CSVから」をクリックし、csvファイルを選択します
  4. データが正しいかどうかプレビューで確認します。
  5. いくつかの列が日付に変換されている場合は、「編集」をクリックし、列の先頭にあるカレンダーをクリックしてテキストタイプを選択します。
  6. 「閉じるとロード」をクリックします

0

Excel 2003から2007でこれを行う簡単な方法を見つけました。空のxlsワークブックを開きます。次に、[データ]メニューに移動し、外部データをインポートします。csvファイルを選択します。ウィザードを実行し、「列データ形式」で「テキスト」にする必要のある列を選択します。これにより、その列全体がテキスト形式としてインポートされ、Excelが特定のセルを日付として扱わないようにします。


0

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

私の場合、CSV内で「1-2」や「7-12」などの値が逆コンマで囲まれていると、Excel内の日付に自動的に変換されます。その後、プレーンテキストだけに変換すると、 43768などの日付の数値表現。さらに、バーコードやEAN番号で見つかった大きな数値を、再度変換できない123E +数値に再フォーマットします。

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

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


0

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

  • Wordで開く
  • すべてのハイフンをダッシュ​​に置き換えます
  • 保存して閉じます
  • Excelで開く

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


0

私は、科学表記に変換し続けるクレジットカード番号に対してこれを行います。結局、.csvをGoogleスプレッドシートにインポートします。インポートオプションで、数値の自動フォーマットを無効にできるようになりました。機密性の高い列をプレーンテキストに設定し、xlsxとしてダウンロードします。

それはひどいワークフローですが、少なくとも私の価値観は本来あるべき状態のままです。


他の回答をいくつか読んでわざわざ読むと、誰かがすでにここでこれを提案していることがわかります
ローレル

お邪魔しました、ありがとうございます。自動フォーマット選択がインポートプロセスの新しい部分であることをほのめかします。私の答えは、私と同じように、この特定の問題に対処するためにスプレッドシートを使用することを余儀なくされた人々に、非常に具体的なワークフローを提供します。私の考えでは、これは別の答えに値します。あなたの口調を少し調整すると、実際にあなたのコメントが役に立ったと解釈される場合があります。これが、このWebサイトファミリーの重要なポイントです。
Brendonwbrown 2016

ただし、他の回答にあるように、Excelのテキストインポートを使用してCSVファイルをインポートするだけで、スプレッドシートに煩わされることはありません。
NetMage

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解決策を見たことがありません。このコードは、データを元の形式で保持します。


-1

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

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

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


9
データの先頭に 'を入れたくない。

27
-1。'はExcelに直接入力した場合にのみ機能しますが、CSVでは機能しません。インポート後にExcelセルに余分な'文字が含まれます。
TMS

-1

別の方法:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.