Python批量转换XML及Strict Open XML为XLSX报错问题求解
XML批量转XLSX解决方案
原脚本错误原因
你之前使用的脚本仅修改了文件扩展名,未对文件内部内容做格式转换,因此会触发Excel的格式不匹配报错。修改为xls后缀可打开是因为Excel对旧格式的容错兼容,但文件本质仍是XML结构,无法直接作为正规xlsx文件使用。
前置依赖安装
首先安装所需Python库:
pip install pandas openpyxl lxml
通用跨平台转换脚本
适配绝大多数表结构XML文件,生成标准xlsx格式文件,不会修改原XML:
import os import pandas as pd # 替换为你的XML文件所在文件夹路径 xml_folder = "/FolderWithXMLFiles" for filename in os.listdir(xml_folder): # 仅处理.xml后缀的文件 if not filename.lower().endswith(".xml"): continue xml_path = os.path.join(xml_folder, filename) # 生成输出xlsx路径 xlsx_path = os.path.join(xml_folder, f"{os.path.splitext(filename)[0]}.xlsx") try: # 读取XML内容,嵌套结构可添加xpath参数指定表格节点,比如xpath="//row" df = pd.read_xml(xml_path) # 导出为xlsx格式,不保留索引 df.to_excel(xlsx_path, index=False, engine="openpyxl") print(f"转换完成:{filename}") except Exception as e: print(f"转换失败:{filename},错误信息:{str(e)}")
Windows环境高兼容性备选方案
如果你的XML是Excel导出的专用XML格式,可直接调用Excel本身的解析能力转换,完美适配所有Excel支持的XML/Strict Open XML格式:
- 先安装依赖:
pip install pywin32
- 转换脚本:
import os import win32com.client as win32 xml_folder = "/FolderWithXMLFiles" # 启动Excel后台进程 excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False for filename in os.listdir(xml_folder): if not filename.lower().endswith(".xml"): continue xml_path = os.path.join(xml_folder, filename) xlsx_path = os.path.join(xml_folder, f"{os.path.splitext(filename)[0]}.xlsx") try: wb = excel.Workbooks.Open(xml_path) # 51为xlsx格式的官方代码 wb.SaveAs(xlsx_path, FileFormat=51) wb.Close() print(f"转换完成:{filename}") except Exception as e: print(f"转换失败:{filename},错误信息:{str(e)}") excel.Quit()
注意事项
- 如果XML为嵌套结构,可调整
pd.read_xml()的xpath参数定位到需要提取的表格节点即可 - 处理第二批Strict Open XML格式文件时,仅需修改脚本中的后缀判断条件为对应文件后缀即可
内容的提问来源于stack exchange,提问作者rknkhn
相关产品推荐
相关产品推荐

