如何使用openpyxl按固定行偏移增量写入PDF解析数据到Excel模板
解决方案
核心逻辑
你需要的偏移规则可以通过遍历PDF时的索引计算实现:
- 第1个PDF的偏移量为
0 - 第N个PDF的偏移量为
(N-1)*20
所有目标单元格的行号直接加上对应偏移量即可得到写入位置,完全匹配你给出的示例规则。
优化后完整代码
import glob, os from tika import parser import openpyxl input_path = "../Input" template = "../Project/template.xlsm" output_dir = "../Output" # 提前创建输出目录避免保存报错 os.makedirs(output_dir, exist_ok=True) def extract_text(file): parsed = parser.from_file(file) return parsed['content'] # 加载模板 wb = openpyxl.load_workbook(template, read_only=False, keep_vba=True) sheet = wb.active # 获取所有PDF文件列表 pdf_files = glob.glob(os.path.join(input_path, '*.pdf')) # 枚举遍历:idx从0开始,刚好对应偏移量计算 for idx, file in enumerate(pdf_files): # 计算当前PDF的行偏移值 offset = idx * 20 # 这里替换成你自己的信息提取逻辑,拿到对应value text = extract_text(file) # 以下为你的信息提取逻辑替换位置 value = "" # 替换为从text提取的对应字段 value2 = "" value3 = "" value4 = "" value5 = "" value6 = "" # 写入单元格:行号=基准行号+偏移量 sheet[f'C{3 + offset}'] = value sheet[f'C{4 + offset}'] = value2 sheet[f'F{3 + offset}'] = value3 sheet[f'C{13 + offset}'] = value4 sheet[f'C{15 + offset}'] = value5 sheet[f'C{17 + offset}'] = value6 # 保存文件 output_file = os.path.join(output_dir, "report.xlsm") wb.save(output_file) wb.close()
关键优化说明
- 去掉了冗余的
pdfCounter统计,枚举遍历会自动处理所有匹配到的PDF,新增/减少PDF文件不需要调整代码逻辑 - 单元格写入逻辑移入循环内部,通过f-string动态拼接单元格位置,完全避免覆盖问题
- 新增了输出目录自动创建逻辑,避免目录不存在时保存报错
- 增加了工作簿关闭操作,避免资源占用
内容的提问来源于stack exchange,提问作者WarriorKarna
相关产品推荐
相关产品推荐

