[特殊字符] Python 实战 | 从 Excel 提取数据 → 生成美观 Word 收货记录表格(含合并单元格 + 总计功能)

发布于:2025-07-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

本教程通过 Python 实现“Excel 数据提取 → Word 写入 → Word 表格合并单元格 + 数量自动汇总”的全流程自动化,是办公中常见的表格处理场景。适合采购、仓储、报表自动化需求,一键生成规范美观的收货报告。


① 📥 从 Excel 中提取数据

使用 openpyxl 模块,读取 Excel 表格中第二行起的数据,包含:序号、供应商、物料编码、型号、描述、数量、日期。

from openpyxl import load_workbook

wb = load_workbook("收货数据.xlsx")
ws = wb.active
data = []

for row in range(2, ws.max_row + 1):
    seq, supplier, material_pn, material_model, desp, qty = [
        ws[f"{col}{row}"].value for col in ["A","B","C","D","E","F"]
    ]
    date = ws[f"G{row}"].value.date()
    data.append([seq, supplier, material_pn, material_model, desp, qty, date])
  • value.date() 用于格式化 datetime 对象;

  • 最终 data 是一个嵌套列表,方便后续处理。


② 🔢 数量汇总函数

定义 Sum_list() 函数用于累加数量列数据,方便后续写入 Word 总计行:

def Sum_list(lst):
    s = 0
    for num in lst:
        s += num
    return s

qty_list = [item[5] for item in data]
sum_qty = Sum_list(qty_list)

③ 🔗 合并 Word 表格中连续相同单元格

使用 python-docx,定义一个通用函数 Merge_cells(),用于合并表格中某列的连续相同内容(如供应商或物料编码)。

def Merge_cells(table, target_list, start_row, col):
    start = end = 0
    reference = target_list[0]
    for i in range(len(target_list)):
        if target_list[i] != reference or i == len(target_list) - 1:
            end = i - 1 if target_list[i] != reference else i
            table.cell(start + start_row, col).merge(
                table.cell(end + start_row, col)
            )
            reference = target_list[i]
            start = end + 1
  • start_row 为数据起始行索引;

  • col 为目标列索引(0 起始);

  • 使用 Cell.merge() 合并单元格。


④ 📝 生成 Word 收货记录表格(从 Excel 数据写入)

将数据写入 Word 模板表格中,逐行填充,并自动合并列及添加数量总计行:

from docx import Document

doc = Document("收货记录模板.docx")
table = doc.tables[0]

supplier = [item[1] for item in data]
pn = [item[2] for item in data]

# 增加新行以容纳所有记录
for _ in supplier:
    table.add_row()

Merge_cells(table, supplier, start_row=1, col=1)
Merge_cells(table, pn, start_row=1, col=2)

# 填写数据信息
for idx, row_idx in enumerate(range(1, len(supplier) + 1)):
    for col_idx in range(len(data[0])):
        table.cell(row_idx, col_idx).text = str(data[idx][col_idx])

# 添加“总数”合并单元格并写入汇总
max_row = len(table.rows)
qty_row = max_row - 1
table.cell(qty_row, 4).text = '总数:'
table.cell(qty_row, 5).text = str(sum_qty)

doc.save("收货记录.docx")

📸 结果展示区

 


✅ 总结与提示

  更多实用案例,代码,素材如下:

自取链接:https://pan.quark.cn/s/a46f30accea2

  • 自动化流程有效减轻手动操作:Excel 提取 + Word 写入 + 单元格合并 + 总计都可一键完成;

  • 支持任意列合并、高度复用,可用于各种表格自动生成场景(如报销单、发票汇总、项目记录);

  • 可扩展功能示例:

    • 样式统一:代码自动设置字体大小、粗细;

    • 动态模板识别:根据关键字识别目标表格;

    • 拆分:添加跨文档或跨列拆分功能。

如果你觉得这篇内容实用,欢迎点赞、收藏、评论!也可以告诉我你希望的扩展方向或下一个办公自动化案例,我可以继续帮你做成系列教程 🔧


网站公告

今日签到

点亮在社区的每一天
去签到