如何用Python读取Strict Open XML格式的.xlsx文件?
解决Strict Open XML格式.xlsx文件的Python读取问题
针对Strict Open XML格式的.xlsx文件,常规pandas读取方法失效,这里提供两种可行的自动化解决方案:
方法一:利用openpyxl的Strict模式读取
openpyxl原生支持Strict Open XML标准,只需在pd.read_excel中指定引擎并传递strict参数即可:
import pandas as pd # 读取Strict格式的xlsx文件 df = pd.read_excel( "your_strict_file.xlsx", engine="openpyxl", engine_kwargs={"strict": True} )
注意:执行前确保已安装openpyxl,若未安装可运行pip install openpyxl。
方法二:手动解析XML内容(兜底方案)
如果上述方法仍有问题,可直接解压xlsx文件(本质是zip包)并解析内部的XML数据:
import zipfile import xml.etree.ElementTree as ET import pandas as pd # Strict格式的XML命名空间 ns = {'ss': 'http://purl.oclc.org/ooxml/spreadsheetml/main'} with zipfile.ZipFile("your_strict_file.xlsx", 'r') as zf: # 读取第一个工作表的XML文件,多工作表需遍历sheetN.xml with zf.open('xl/worksheets/sheet1.xml') as f: tree = ET.parse(f) root = tree.getroot() # 提取行和单元格数据 rows = [] for row in root.findall('.//ss:row', ns): cell_values = [] for cell in row.findall('.//ss:c', ns): # 获取单元格值,处理空值情况 value_elem = cell.find('.//ss:v', ns) cell_values.append(value_elem.text if value_elem is not None else '') rows.append(cell_values) # 转换为DataFrame,第一行作为表头 df = pd.DataFrame(rows[1:], columns=rows[0])
这种方法无需依赖第三方Excel处理库,直接操作底层XML,适合极端场景下的自动化流程。
内容的提问来源于stack exchange,提问作者Lucas Bueno
相关产品推荐
相关产品推荐

