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

Python新手求助:如何将Excel SpreadsheetML转为.xlsx以使用openpyxl?

当然可以用Python实现这个转换!

作为Python新手,你有几个靠谱的方案可以把SpreadsheetML格式的XML文件转成xlsx(或者其他openpyxl支持的格式),下面给你详细讲两种最实用的方法:

方法1:调用Excel COM接口(Windows环境首选)

如果你的电脑是Windows且安装了Excel,这个方法最省心——直接让Excel帮你完成格式转换,毕竟Excel原生就支持SpreadsheetML格式。我们可以用pywin32库的win32com.client模块来实现自动化操作:

首先安装依赖:

pip install pywin32

然后运行这段代码:

import win32com.client as win32
import os

# 你的SpreadsheetML XML文件路径
xml_path = "your_file.xml"
# 要输出的xlsx文件路径
xlsx_path = "output_file.xlsx"

# 启动Excel应用
excel = win32.gencache.EnsureDispatch('Excel.Application')
# 后台运行,不显示窗口
excel.Visible = False

try:
    # 打开XML文件(Excel会自动识别SpreadsheetML格式)
    workbook = excel.Workbooks.Open(os.path.abspath(xml_path))
    # 另存为xlsx格式(51是xlsx对应的格式代码)
    workbook.SaveAs(os.path.abspath(xlsx_path), FileFormat=51)
    print(f"转换完成!文件已保存到 {xlsx_path}")
finally:
    # 关闭工作簿和Excel,释放系统资源
    workbook.Close()
    excel.Quit()

这个方法的好处是不用自己解析复杂的XML结构,Excel会帮你处理所有格式细节,转出来的xlsx文件直接就能用openpyxl读取。

方法2:手动解析XML并保存为xlsx(跨平台方案)

如果是Linux/macOS环境,或者没有安装Excel,可以用lxml解析SpreadsheetML的XML结构,再用pandas或者openpyxl直接生成xlsx文件。

首先安装依赖:

pip install lxml pandas openpyxl

下面是一个简单的解析示例(注意:SpreadsheetML的结构可能因文件而异,你可能需要根据自己的XML结构调整代码):

from lxml import etree
import pandas as pd

# 加载XML文件
tree = etree.parse("your_file.xml")
# 定义SpreadsheetML的命名空间
ns = {"ss": "urn:schemas-microsoft-com:office:spreadsheet"}

# 获取所有行数据
rows = tree.xpath("//ss:Row", namespaces=ns)
data = []

for row in rows:
    # 提取当前行所有单元格的内容
    cells = row.xpath("./ss:Cell/ss:Data", namespaces=ns)
    row_data = [cell.text for cell in cells]
    data.append(row_data)

# 转成DataFrame(假设第一行是表头)
df = pd.DataFrame(data[1:], columns=data[0])
# 保存为xlsx文件
df.to_excel("output_file.xlsx", index=False)

print("转换完成!现在可以用openpyxl读取这个xlsx文件了")

这个方法需要你对XML的结构有一点了解,你可以先打开你的XML文件看看标签结构,调整xpath表达式来匹配你的数据。

后续用openpyxl读取

不管用哪种方法转成xlsx后,就可以直接用openpyxl读取了:

from openpyxl import load_workbook

wb = load_workbook("output_file.xlsx")
ws = wb.active

# 示例:读取第一行第一列的单元格内容
print(ws.cell(row=1, column=1).value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:12:57