You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python基于openpyxl与yattag批量转换多个XLSX为对应XML文件

批量转换实现方法

把原有单文件处理逻辑封装为可复用函数,遍历所有符合命名规则的XLSX文件逐个处理即可,核心转换逻辑不需要修改。

改造后完整代码

import os
from openpyxl import load_workbook
from yattag import Doc, indent

def convert_single_file(input_xlsx: str, output_xml: str):
    # 原有单文件转换逻辑,仅补充编码参数避免乱码
    wb = load_workbook(input_xlsx, data_only=True)
    ws = wb.active
    row_data_list = []
    
    for row in ws.iter_rows(min_row=2, max_row=7, min_col=1, max_col=6):
        row_val = [cell.value for cell in row]
        row_data_list.append(row_val)

    doc, tag, text = Doc().tagtext()
    for row in row_data_list:
        with tag("column0"):
            text(row[0])
        with tag("column1"):
            text(row[1])
        with tag("column2"):
            text(row[2])
        with tag("column3"):
            text(row[3])
        with tag("column4"):
            text(row[4])
        with tag("column5"):
            text(row[5])
            
    xml_content = indent(
        doc.getvalue(),
        indentation='    ',
        indent_text=False
    )

    with open(output_xml, "w", encoding="utf-8") as f:
        f.write(xml_content)

if __name__ == "__main__":
    # 按提供的命名规则匹配文件,修改total_num为实际的文件总数即可
    total_num = 3
    for idx in range(1, total_num + 1):
        if idx == 1:
            in_path = "convert_file.xlsx"
            out_path = "result_file.xml"
        else:
            in_path = f"convert_file_{idx}.xlsx"
            out_path = f"result_file_{idx}.xml"
        
        if os.path.exists(in_path):
            convert_single_file(in_path, out_path)
            print(f"处理完成: {in_path} → {out_path}")
        else:
            print(f"跳过缺失文件: {in_path}")

可选优化:自动扫描目录文件

如果不想手动设置文件总数,可以用glob自动扫描当前目录下所有符合命名规则的XLSX文件,替换主函数部分代码即可:

import glob

if __name__ == "__main__":
    # 自动匹配所有convert_file开头的xlsx文件
    for in_path in glob.glob("convert_file*.xlsx"):
        out_path = in_path.replace("convert_file", "result_file").replace(".xlsx", ".xml")
        convert_single_file(in_path, out_path)
        print(f"处理完成: {in_path} → {out_path}")

注意事项

  • 写入文件时新增encoding="utf-8"参数,可避免单元格包含中文时出现乱码
  • 生成的XML结构和原有单文件代码输出的结构完全一致,不需要调整后续解析逻辑
  • 两种遍历文件的方式二选一即可,输出文件命名完全匹配要求的对应规则

内容的提问来源于stack exchange,提问作者Bernhard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:06:28