概述
距离最初的帖子已经过去近10年,Excel在导入CSV文件方面并未有所改善。不过,我发现它在导入HTML表格方面要好得多。因此,我们可以使用Python将CSV转换为HTML,然后将生成的HTML导入Excel。
这种方法的优点是:(a) 它可靠地工作,(b) 您不需要将数据发送到第三方服务(例如Google表格),(c) 对于大多数用户而言,无需安装额外的“重若鸿毛”的软件(如LibreOffice、Numbers等) ,(d) 比处理CR/LF字符和BOM标记更高级别,(e) 无需调整区域设置。
步骤
只要安装了Python 3,以下步骤就可以在任何类似bash的shell上运行。虽然Python可以直接读取CSV,但csvkit用于进行中间转换为JSON。这样我们就可以避免在Python代码中处理CSV的复杂性。
首先,将以下脚本另存为json2html.py
。该脚本从stdin读取JSON文件,并将其转储为HTML表格:
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