批量提取Excel数据时触发pywintypes.com_error(OLE 0x800a01a8)的解决
Excel批量提取数据时触发OLE错误0x800a01a8的解决过程
背景
用Python 3.11.4 + xlWings开发Excel数据提取程序,核心逻辑:
- 提取Excel中的标准数据和用户自定义数据,存入预先创建的数据库
- 待提取信息存在字典
header_basis中:- 键为数据库表头
- 标准数据的值是
[提取值, 数据库列类型]数组 - 用户自定义数据的数组额外包含搜索字符串和查找地址
- 遍历所有目标文件,按列循环更新字典中要存入数据库的值
问题
批量处理文件时,某特定Excel文件触发错误:
pywintypes.com_error: (-2146827864, 'OLE error 0x800a01a8', None, None)
错误触发点在以下代码的最后一行:
# Retrieve properties for header in headers: if header_basis[header][3] is None: header_basis[header][0] = "not found!" else: header_basis[header][0] = header_basis[header][3].offset(0,i).value
headers是用户自定义数据名称的字符串数组,同时作为数据库列名和字典键。
异常现象
- 单独提取该报错文件无问题
- 之前用独立数组存储值时也无错误,旧代码:
改为字典存储后才出现问题,新代码:val_arr[i] = fun_search_string(search_string, worksheet[PROPERTY_RANGE],0)[0]header_basis[header][3] = (fun_search_string(search_string, worksheet[PROPERTY_RANGE],0)[0])
解决方案
怀疑是内存中残留的Excel对象引用导致的问题,在每次循环更新header_basis[header][3]前,先将其设为None,问题得以解决。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

