概観
元の投稿からほぼ10年後、ExcelはCSVファイルのインポートに関して改善されていません。ただし、HTMLテーブルをインポートする方がはるかに優れていることがわかりました。したがって、Pythonを使用してCSVをHTMLに変換し、結果のHTMLをExcelにインポートできます。
このアプローチの利点は、(a)確実に機能する、(b)データをサードパーティのサービス(Googleシートなど)に送信する必要がない、(c)追加の「ファット」インストールが不要(LibreOffice、数字など)ほとんどのユーザーにとって、(d)CR / LF文字とBOMマーカーでの干渉よりも高いレベル、(e)ロケール設定をいじる必要はありません。
手順
次の手順は、Python 3がインストールされている限り、bashのようなシェルで実行できます。Pythonを使用してCSVを直接読み取ることができますが、csvkitはJSONへの中間変換を行うために使用されます。これにより、Pythonコードで複雑なCSVを処理する必要がなくなります。
まず、次のスクリプトをとして保存しますjson2html.py
。スクリプトはstdinからJSONファイルを読み取り、HTMLテーブルとしてダンプします。
#!/usr/bin/env python3
import sys, json, html
if __name__ == '__main__':
header_emitted = False
make_th = lambda s: "<th>%s</th>" % (html.escape(s if s else ""))
make_td = lambda s: "<td>%s</td>" % (html.escape(s if s else ""))
make_tr = lambda l, make_cell: "<tr>%s</tr>" % ( "".join([make_cell(v) for v in l]) )
print("<html><body>\n<table>")
for line in json.load(sys.stdin):
lk, lv = zip(*line.items())
if not header_emitted:
print(make_tr(lk, make_th))
header_emitted = True
print(make_tr(lv, make_td))
print("</table\n</body></html>")
次に、csvkitを仮想環境にインストールし、それを使用csvjson
して入力ファイルをスクリプトにフィードします。-I
引数で推測するセルタイプを無効にすることをお勧めします。
$ virtualenv -p python3 pyenv
$ . ./pyenv/bin/activate
$ pip install csvkit
$ csvjson -I input.csv | python3 json2html.py > output.html
今すぐoutput.html
Excelでインポートすることができます。セルの改行は保持されます。
必要に応じて、Python仮想環境をクリーンアップできます。
$ deactivate
$ rm -rf pyenv