总览
在原始帖子发布将近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