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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:31:13