并不是真正的答案,只是为了确认这里有一些本地化/i18n“魔法”破坏了游戏。
在 Excel 中,我创建了一个包含 4 个内容相同的单元格的表格:07.04.2021 17:05:00 和以下 number_format(在 Excel 中设置)。然后我使用pd.ExcelFile(只读,默认使用openpyxl)打开文件并检查数字格式。结果:
| Excel |
Openpyxl |
TT.MM.JJJJ hh:mm |
m/d/yy h:mm |
TT.MM.JJJJ |
mm-dd-yy |
MMM JJ |
mmm-yy |
[h]:mm:ss |
[h]:mm:ss |
将第 3 行更改为 MMMM JJJJ 时,openpyxl 会报告 mmmm\\ yyyy。因此,源语言环境(即 DE 中的 TT.MM.JJJ)的典型“默认样式”似乎在全球/英语上下文中由 Excel 的默认值(m/d/yy)“巧妙地”适应。只有不寻常的自定义样式会被逐字保留。
对此进行测试,我将 Excel 中的第一个格式字符串更改为 TTTT, TT.MM.JJJJ,并在 Openpyxl 中得到 dddd\\,\\ dd/mm/yyyy。
深入挖掘 Excel 生成的 XLSX 文件(只需重命名为 ZIP 并提取)。我最后一个版本的文件styles.xml 是说明性的:
<numFmts count="2">
<numFmt numFmtId="167" formatCode="mmmm\ yyyy"/>
<numFmt numFmtId="168" formatCode="dddd\,\ dd/mm/yyyy"/>
</numFmts>
因此,尽管有四种“手动”设置的数字格式,但只有两种创造性的格式字符串才能进入文件。其他格式似乎仅由 ID 引用,因此可以根据应用程序语言环境更改表示形式。更明显的是,Excel 完全自行完成语言环境翻译。将TTTT, TT.MM.JJJJ 翻译成ddddd\, dd/mm/yyyy 使其看起来具有用于常见模式的“智能路径”,即将常用格式交换日期和月份,而用于不常见/自定义格式字符串的智能路径较少。