为什么 csvkit 的 in2csv 将日期转换为整数?

Why does csvkit's in2csv convert dates to integers?

我从 this URL, which contains rows like the following:

下载了一个 .xlsx 文件

但是当我尝试使用 in2csv 转换此文件时,从 csvkit 版本 0.9.1 开始,我得到如下输出行:

3,,0.625,42185,42916,912828XJ4,1900-01-26,0.9119,-----,...
4,,0.875,41835,42931,912828WT3,1900-01-27,0.9122,-----,...

我们得到的不是可识别为日期的条目,而是整数。整数似乎是 1900-01-01 与 xlsx 中相应日期之间的天数。此外,本应为整数的值($26 和 $27)会以日期格式显示!有没有一种简单的方法可以让 in2csv 以可识别的格式输出这些日期?

简而言之

只需升级 openpyxl 包。这是它的一个已知错误并已修复。

pip install --upgrade openpyxl

升级后:

3,,0.625,2015-06-30,2017-06-30,912828XJ4,26,0.9119,-----,...
4,,0.875,2014-07-15,2017-07-15,912828WT3,27,0.9122,-----,...

在龙

我将 table 的典型行复制到新创建的 .xlsx 文件中,并在转换时出现以下错误:

list index out of range

跟踪异常:

>>> from csvkit import convert
>>> convert.convert(open('test.xlsx', 'rb'), 'xlsx')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.4/site-packages/csvkit/convert/__init__.py", line 39, in convert
    return xlsx2csv(f, **kwargs)
  File "/usr/local/lib/python3.4/site-packages/csvkit/convert/xlsx.py", line 51, in xlsx2csv
    book = load_workbook(f, use_iterators=True, data_only=True)
  File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/excel.py", line 154, in load_workbook
    _load_workbook(wb, archive, filename, read_only, keep_vba)
  File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/excel.py", line 209, in _load_workbook
    parsed_styles = read_style_table(archive)
  File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 200, in read_style_table
    p.parse()
  File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 56, in parse
    self.parse_cell_styles()
  File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 138, in parse_cell_styles
    self._parse_xfs(node)
  File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 160, in _parse_xfs
    format_code = self.number_formats[numFmtId-165]
IndexError: list index out of range
list index out of range

所以事情发生在 openpyxl 包中,用于 read/write Excel 2010 xlsx/xlsm 文件。

该问题已在 openyxl 的最新版本中 reported and fixed。然而在 csvkitrequirements.txt 中:

openpyxl==2.2.0-b1

根据 this issue,这只是当时的一种解决方法,所以我认为只需升级 openpyxl(当前为 2.2.5)就可以了。