如何在Python中处理OLE2对象?修改xlsx后AnyLogic报错求助
问题:处理xlsx文件时抛出"InputStream非OLE2/OOXML流"错误
我正在开发一个Python项目,需读取xlsx文件、修改指定工作表的某一行后保存,作为已导出且无法修改的AnyLogic程序的输入。但运行时出现报错:
Your InputStream was neither an OLE2 stream, nor an OOXML stream
先后尝试用Pandas及它依赖的openpyxl库处理xlsx,使用的openpyxl代码如下:
def open_workbook(source_file: str, worksheet_name: str): workbook = openpyxl.load_workbook(source_file) worksheet = workbook.worksheets[WORKSHEETS_NAME[worksheet_name]] return workbook, worksheet def write_extreme(workbook, worksheet_name: str, j: int): worksheet = workbook.worksheets[WORKSHEETS_NAME[worksheet_name]] for i in range(worksheet.max_row - 1): if i == j: print("hola") worksheet.cell(i + 1, CA_COLUMNS_INDEX["nAmbulance"], 1771) print(1771 - worksheet.max_row + 2) else: print("hola2") worksheet.cell(i + 1, CA_COLUMNS_INDEX["nAmbulance"], 1) workbook.save(SOURCE_PATH + "Hospitales_Ambulancias_CM_3.xlsx")
解决方案
检查文件有效性
确认目标文件是标准的xlsx格式:- 手动用Excel打开文件,看是否能正常读取,若提示损坏则重新生成文件;
- 排查是否是其他格式(如csv、ods)修改后缀名伪装成xlsx,这种情况openpyxl无法识别。
验证文件路径
在open_workbook函数开头添加路径验证代码,确认文件存在:import os def open_workbook(source_file: str, worksheet_name: str): if not os.path.exists(source_file): raise FileNotFoundError(f"文件不存在:{source_file}") # 后续代码不变调整openpyxl加载参数
尝试给load_workbook添加参数适配特殊格式:# 仅读取单元格值(忽略公式) workbook = openpyxl.load_workbook(source_file, data_only=True) # 或启用读写模式(默认已开启,显式声明避免隐式问题) workbook = openpyxl.load_workbook(source_file, read_only=False)排查文件占用与权限
- 关闭所有打开该xlsx文件的程序(如Excel、AnyLogic),避免文件被锁定;
- 确认Python进程有读取源文件和写入目标路径的权限,Windows系统下注意不要写入受保护的目录(如C盘根目录)。
Pandas替代实现
若openpyxl方案仍有问题,可尝试用Pandas结合openpyxl引擎处理,代码更简洁:import pandas as pd def modify_excel(source_file, worksheet_name, j): # 读取指定工作表 df = pd.read_excel(source_file, sheet_name=WORKSHEETS_NAME[worksheet_name]) # 修改目标行的nAmbulance列 df.loc[j, 'nAmbulance'] = 1771 # 其余行设为1 df.loc[df.index != j, 'nAmbulance'] = 1 # 保存文件 df.to_excel(SOURCE_PATH + "Hospitales_Ambulancias_CM_3.xlsx", index=False, engine='openpyxl')
内容的提问来源于stack exchange,提问作者Daniel Martín Pinedo
相关产品推荐
相关产品推荐

