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
相关产品推荐
相关产品推荐

