按区域导入 200 行客户,省份列只有第一行有 广东省,其余 199 行读出来是 None,入库后地址只剩后面几段,快递面单打不出来。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
for rng in ws.merged_cells.ranges:
v = ws.cell(rng.min_row, rng.min_col).value
for r in range(rng.min_row, rng.max_row + 1):
ws.cell(r, rng.min_col).value = v
合并区域在文件里只有左上角单元格存了值,其余是 MergedCell,读出来就是空。解析代码按行取值,没有处理合并范围。这一点先确认清楚,后面就不用反复试。
碰到「合并单元格解析」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
具体做法是,读之前遍历 merged_cells.ranges 把左上角的值填到整个区域;或者要求填报人取消合并 每行都写全;导入后抽查地址完整率 低于阈值就回退。
改完照着核一遍,同一文件重新解析后 200 行省份都有值,地址完整率 100%,面单打印不再缺省份。
