何时使用
当主要文档是 Microsoft Excel 工作簿或电子表格文件时,特别是当公式、日期、格式、合并单元格、工作簿结构或跨平台行为很重要时使用。
核心规则
使用 pandas 进行分析、重塑和类似 CSV 的任务。
当公式、样式、表格、注释、合并单元格或工作簿保存很重要时,使用 openpyxl。
将 CSV 视为纯数据交换,而不是 Excel 功能完整的格式。
读取值、保存活跃工作簿和从头构建模型是不同的电子表格工作。
Excel 将日期存储为序列号,而不是真正的日期对象。
1900 日期系统包括虚假的闰日 bug,一些工作簿使用 1904 系统。
时间是分数天数据,因此格式和转换都很重要。
日期的正确性不足以在数字格式仍然显示错误的内容给用户时。
- 保持计算在 Excel 中,当工作簿应该保持活跃时
将公式写入单元格,而不是在 Python 中硬编码派生结果。
使用引用假设单元格,而不是在公式中使用魔术数字。
缓存的公式值可能过时,因此在编辑后不要盲目信任它们。
在交付前检查复制的公式是否有错误的范围、错误的表格和静默的偏移。
绝对和相对引用是逻辑的一部分,因此复制的公式即使仍然“有效”也可能是错误的。
在填充整个块之前,先在几个代表性单元格上测试新公式。
在交付依赖于它们的公式之前,验证分母、命名范围和先行单元格。
工作簿应该在没有已知 #REF!、#DIV/0!、#VALUE!、#NAME? 或循环引用错误的情况下交付,而不是留给用户修复。
对于模型风格的工作,记录非明显的硬编码、假设或源输入在注释或附近的笔记中。
长标识符、电话号码、邮政编码和前导零值通常应该存储为文本。
Excel 会默默地截断超过 15 位的数字精度。
混合文本-数字列需要在读取和写入时进行显式处理。
科学表示法、自动解析日期和剥离前导零是常见的腐败,而不是美观问题。
现有的模板覆盖了通用的样式建议。
仅合并范围的左上角单元格存储值。
隐藏行、隐藏列、命名范围和外部引用仍然可以影响公式和输出。
共享字符串、定义的名称和表级约定即使可见单元格看起来很简单,也很重要。
匹配新填充单元格的样式,而不是悄悄地引入新的视觉系统。
如果工作簿是模板,请保留表格顺序、宽度、冻结、过滤器、打印设置、验证和视觉约定,除非任务显式地更改它们。
条件格式、过滤器、打印区域和数据验证通常带有业务含义,即使用户只提到了数字。
如果没有现有的样式指南且文件是模型,请保持可编辑的输入在视觉上可区分于公式,但永远不要覆盖已建立的模板以强制执行通用房屋样式。
如果接收者需要当前值,则公式字符串本身是不够的。
openpyxl 保留公式但不计算它们。
验证没有 #REF!、#DIV/0!、#VALUE!、#NAME? 或循环引用错误。
如果布局很重要,在调用完成之前渲染或视觉审查工作簿。
小心读取模式:仅为值打开工作簿然后保存可以将公式扁平化为静态值。
如果假设或硬编码覆盖必须保持,请使其足够明显,以便下一个编辑器可以审计工作簿。
大型工作簿可能由于枯燥的原因而失败:内存峰值、填充的空行和缓慢的全表读取。
当文件足够大以至于一次加载所有内容变得脆弱时,使用流式或分块读取。
大文件工作流还需要更窄的读取、显式数据类型和表目标,以避免意外损坏。
常见陷阱
读取时的类型推断可能会将数字留为文本或将 ID 转换为损坏的数字值。
列索引在工具之间可能有所不同,因此在生成的公式中,偏移错误很常见。
单元格中的新行需要包装才能正确显示。
外部引用很容易在源文件移动时破坏。
旧 Excel 工作流中的密码保护不是严肃的安全措施。
.xlsm 可以包含宏,.xls 仍然是一个更紧凑的遗留格式。
大文件可能需要流式读取或更谨慎的内存处理。
Google Sheets 和 LibreOffice 可能会以与 Excel 不同的方式解释日期、公式或样式。
动态数组或较新的 Excel 函数(如 FILTER、XLOOKUP、SORT 或 SEQUENCE)可能会在较旧的查看器中失败或降级。
工作簿