确定 xlsx 单元格是否为 Excel 2007 电子表格的日期格式

Edw*_*uth 2 python excel openxml xlsx

我正在处理一些通过解析 xml 从 xlsx 文件读取数据的代码。除了日期单元格之外,一切都非常简单。

日期存储为整数,并有一个“s”属性,它是样式表的索引,可用于获取日期格式字符串。以下是之前 stackoverflow 问题中的一些示例,链接如下:

19 = 'h:mm:ss 上午/下午';

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"/>
Run Code Online (Sandbox Code Playgroud)

确定单元格是否应该格式化为日期很困难,因为我能找到的唯一指标是 formatCode。这显然是一个日期,但可以通过多种方式对单元格进行格式化。我最初的尝试是在 formatCode 中查找 Ms、Ds 和 Ys,但这似乎有问题。

有没有人有这个问题的运气?目前似乎标准 excel 阅读库缺乏 xlsx 支持。我已经通读了标准,并在没有多少运气的情况下挖掘了很多 xlsx 文件。

最好的信息似乎来自这个 stackoverflow 问题:

什么表示办公室打开的 xml 单元格包含日期时间值

谢谢!

Joh*_*hin 5

日期存储为整数

在 Excel 数据模型中,实际上没有整数这样的东西。一切都是浮动的。日期和日期时间是浮点数,表示自变量纪元以来的天数和分数。时间是一天的几分之一。

目前似乎标准 excel 阅读库缺乏 xlsx 支持。

谷歌(“xlsxrd”)。要保持最新状态,请加入python-excel 组

编辑我看到你已经在那里问了一个问题。如果你在那里问过一个像这个问题一样具体的问题,或者回应了我的澄清请求,那么两周前你就会得到这些信息。

查看 xlrd 文档。前面有一个关于 Excel 日期的讨论。所有这些都适用于 Excel 2007 以及早期版本。特别是:需要解析自定义格式。必须有一个用于日期格式的“标准”格式索引表。某些地方列出的“标准”格式不包括 CJK 语言环境中使用的格式。

适合您的选项:

(1)从xlrd源码中借用,包括xldate_as_tuple函数。

(2) 选项 (1) + 获取xlsxrd螺栓固定套件并借用其源代码。

(3) [推荐] 获取xlsxrd并使用扩展套件……您将获得一组 API,这些 API 可在 Excel 2.0 至 2007 版和 Python 2.1 至 2.7 版中运行。