具体表现

按数据条数动态写列,跑到几百条就报最大列数 16384 超限,文件也没生成。

先判断哪一层出错

把行号和列号写反,数据量当作列索引,Excel 单表上限 16384 列,超过就抛异常。判断时先分清是 openpyxl 列数越界 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。

操作步骤

  1. 核对 ws.cell 的 row 与 column 参数顺序
  2. 改用 append 按行追加
  3. 数据量大时按行号递增而不是列

对应的命令或配置片段如下,可直接复制:

from openpyxl import Workbook
wb = Workbook(); ws = wb.active
for i, row in enumerate(data, start=1):
    ws.append(row)
wb.save('out.xlsx')

如果同一现象隔一段时间又出现,多半是某个定时任务或重启流程把配置覆盖回去了,顺手查一遍启动脚本。测试环境复现不了时,先对比两边的版本号和配置文件,差异往往就在被忽略的那几行里。

收尾检查

导出文件能被 Excel 正常打开,行数与数据条数一致,没有列超限报错。

作者 9823189