介绍
## Dates
- Excel 日期是序列号——即自 1900-01-01(Windows)或 1904-01-01(旧版 Mac)以来的天数 - 1900 年闰年 Bug:Excel 错误地将 1900 年视为闰年——序列号 60 是 1900 年 2 月 29 日(无效) - 在没有单元格格式的情况下,日期与数字难以区分——始终检查数字格式代码,而不仅仅是值 - 时间是一天的小数部分:0.5 = 12:00 中午;0.25 = 06:00
## 数字
- 15 位精度限制——更大的数字会被静默截断;对 ID、电话号码使用文本格式 - 数字的前导零会被去除——格式化为文本或使用自定义格式 `00000` - 科学计数法会自动触发——`1E10` 会变成数字;如果是字面文本请加引号 - 货币/百分比存储为数字——格式仅用于显示,原始值不同
## 文本与编码
- 共享字符串表只存储唯一文本一次——大文件重用索引;库会处理这种情况 - 每个单元格 32,767 个字符限制 - 单元格内的换行符:`\n` 有效,但单元格需要“自动换行”格式才能显示 - XLSX 完全支持 Unicode——但旧版 XLS 存在代码页问题
## 结构
- 行限制:1,048,576;列限制:16,384 (XFD)——XLS 限制为 65,536 × 256 - 合并单元格:仅左上角的单元格保存值——读取其他单元格返回空值 - 隐藏的行/列仍然包含数据——不要假设隐藏意味着被排除 - 工作表名称最多 31 个字符;禁止使用的字符:`\ / ? * [ ]`
## 公式
- 单元格可能包含公式和缓存结果——某些读取器返回公式,其他返回缓存值 - 公式在打开时重新计算——缓存值可能过时;强制重新计算或读取公式 - 数组公式 (CSE/动态) 在不同 Excel 版本中行为不同 - 外部引用 `[Book.xlsx]Sheet!A1` 在文件移动时会失效
## 跨平台
- Windows 与 Mac Excel:日期系统(1900 与 1904)可能不同——检查工作簿设置 - LibreOffice/Google Sheets:不支持某些 Excel 功能——测试往返转换 - XLSM 包含宏(安全风险);XLSB 是二进制格式(更快,兼容性较差) - 密码保护很容易破解——不是真正的安全措施;请在外部加密文件
## 常见库问题
- 末尾的空行:某些写入器会填充到固定大小——读取时进行修剪 - 读取时的类型推断:作为文本的数字保持为文本;需要显式转换 - 内存:将大文件完全加载到 RAM 中——对大文件使用流式读取器 - 列字母与索引:A=0 还是 A=1 因库而异——验证约定