Read CSVを行うとinvalidになる

あるシステムでCSV形式で出力したファイルを
Read CSVで読み取ろうとすると
“The CSV file format for ファイル名 is invalid”
というエラーが出てしまいます。

普通にエクセルでは開くことができ、またエクセルで上書き保存してからだと
そのファイルはRead CSVを行うことができます。

メモ帳で開いてみると、値がダブルクォーテーションで囲まれており
エクセルで保存したものはダブルクォーテーションが外されていました。
文字コードは”shift_jis”を設定しています。

よろしくお願いします。

一番よくある原因は、CSVのヘッダ行(または1行目)の列数より、列(カラム)が多い行があることだと思います。
なので、まずはCSVのデータを確認してみてください。

その場合に考えられる対処法は、

  1. CSVを出力するソフト側で修正してもらう
    何をもって正しいCSVと言うかは難しいのですが、RFC 4180で規定されているCSVのフォーマットは「各行の列数は同じ」が前提です。
    現実的に修正してもらえるかはケースバイケースなのですが。

  2. Excelで開く
    Excel Application Scopeで開けば、一応開ける筈です。この場合シート名はCSVのファイル名から拡張子を外したものになるので、

    System.IO.Path.GetFileNameWithoutExtension(CSVファイル名)

で取得できます。

  1. テキストファイルとして修正する
    余分なカンマがある、あるいは列名が足りないなら、Read Text Fileで読んで修正したあと、改めてCSVとして開き直す方法もあります。

とりあえずは原因確認が先なのですが、参考になれば。

3 Likes

ご返信ありがとうございます。

ご指摘の通り、ヘッダ行と他の行と列数が異なっていました。

1のソフトを修正することはすこし難しそうです。
2のExcel Application Scopeは元々使用していましたが、
過去に質問しましたがちょっとした問題があり、Read CSVを使用しようと思いました。
3はまだ試したことが無い方法です。試してみたいと思います。

原因が分かったので大変助かりました。
ありがとうございました。