我正在使用一些代码,通过解析 xml 从 xlsx 文件中读取数据。除了日期单元格之外,一切都非常简单。
日期存储为整数,并具有“s”属性,该属性是样式表的索引,可用于获取日期格式字符串。以下是之前 stackoverflow 问题中的一些示例,链接如下:
19 = 'h:mm:ss AM/PM';
20 = 'h:mm';
21 = 'h:mm:ss';
22 = 'm/d/yy h:mm';
这些是来自 ooxml 标准的内置日期格式字符串,但是 excel 似乎倾向于使用自定义格式字符串而不是内置字符串。以下是 Excel 2007 电子表格中的示例格式。 numFmtId大于164是自定义格式。
<numFmt formatCode="MM/DD/YY" numFmtId="165"/>
确定单元格是否应格式化为日期很困难,因为我能找到的唯一指示符是 formatCode。这显然是一个日期,但单元格的格式可以有多种。我最初的尝试是在 formatCode 中查找 Ms、Ds 和 Ys,但这似乎有问题。
有人有幸解决过这个问题吗?看来标准的 Excel 阅读库目前缺乏 xlsx 支持。我已经通读了标准并挖掘了很多 xlsx 文件,但运气不佳。
最好的信息似乎来自这个 stackoverflow 问题:
what indicates an office open xml cell contains a date time value
谢谢!
最佳答案
Dates are stored as integers
在 Excel 数据模型中,实际上不存在整数这样的东西。一切都是漂浮物。日期和日期时间是 float ,表示自变量纪元以来的天数和分数。时间是一天的一小部分。
It seems like the standard excel reading libraries are lacking in xlsx support at this time.
谷歌(“xlsxrd”)。要了解最新信息,请加入the python-excel group .
编辑我发现您有 already asked a question there 。如果您在那里提出了像这个问题一样具体的问题,或者回复了我的澄清请求,您将在两周前获得此信息。
查看 xlrd 文档。前面讨论了 Excel 日期。所有这些都适用于 Excel 2007 以及早期版本。特别是:需要解析自定义格式。有必要有一个用于日期格式的“标准”格式索引表。某些地方列出的“标准”格式不包括 CJK 语言环境中使用的格式。
适合您的选项:
(1) 借用xlrd
源代码,包括xldate_as_tuple函数。
(2) 选项 (1) + 获取 xlsxrd
bolt 固定套件并借用其源代码。
(3) [推荐] 获取 xlsxrd
bolt 固定套件并使用它...您将获得一组可在 Excel 版本 2.0 至 2007 和 Python 版本 2.1 至 2.7 之间运行的 API。
关于python - 确定 xlsx 单元格是否为 Excel 2007 电子表格的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948998/