python - 来自 Python 输出线程错误的 CapitalIQ excel 插件控制
问题描述
我正在使用以下代码capiq_excel
在 Windows 10 上使用包从 Python 控制 Excel 插件。生成 xlsx 文件时,我遇到了一个我不完全理解的错误。我尝试重新安装包,但它没有解决问题。任何帮助,将不胜感激。
编码:
from capiq_excel import download_data_for_capiq_ids
download_data_for_capiq_ids(
['IQ21835', 'IQ24937'], # Capital IQ ids
financial_data_items=['IQ_TOTAL_REV', 'IQ_COST_REV'], # Financial data variable names from Capital IQ
market_data_items=['IQ_FLOAT_PERCENT'], # Market data variable names from Capital IQ
freq='Q',
num_periods=6,
restart=False
)
错误:
Populating XLSX files with Capital IQ data
Error (-2147417842, 'The application called an interface that was marshalled for a different thread.', None, None) populating C:\Users\mdelal001\in_process_data\IQ21835.xlsx. Will wait 30 seconds, restart Excel, and try again.
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\workbook\populate\main.py", line 47, in populate_capiq_for_file
_populate_capiq_for_file(filepath, excel, financial_data_items_dict, market_data_items_dict)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\workbook\populate\main.py", line 66, in _populate_capiq_for_file
wb = excel.Workbooks.Open(filepath)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 524, in __getattr__
if d is not None: return getattr(d, attr)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 485, in __getattr__
return self._ApplyTypes_(*args)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 478, in _ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
SUCCESS: The process "EXCEL.EXE" with PID 65080 has been terminated.
Traceback (most recent call last):
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\workbook\populate\main.py", line 47, in populate_capiq_for_file
_populate_capiq_for_file(filepath, excel, financial_data_items_dict, market_data_items_dict)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\workbook\populate\main.py", line 66, in _populate_capiq_for_file
wb = excel.Workbooks.Open(filepath)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 524, in __getattr__
if d is not None: return getattr(d, attr)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 485, in __getattr__
return self._ApplyTypes_(*args)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 478, in _ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147417842, 'The application called an interface that was marshalled for a different thread.', None, None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\Users\mdelal001\Downloads\from capiq_excel import download_data.py", line 3, in <module>
download_data_for_capiq_ids(
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\main.py", line 98, in download_data_for_capiq_ids
populate_all_files_in_folder(
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\downloader\tools.py", line 35, in populate_all_files_in_folder
excel, successful = _try_to_get_result_if_fail_restart_excel(
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\downloader\tools.py", line 74, in _try_to_get_result_if_fail_restart_excel
excel, successful = async_result.result(timeout=300)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\_base.py", line 445, in result
return self.__get_result()
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\_base.py", line 390, in __get_result
raise self._exception
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\concurrent\futures\thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\workbook\populate\main.py", line 54, in populate_capiq_for_file
return populate_capiq_for_file(
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\capiq_excel\workbook\populate\main.py", line 43, in populate_capiq_for_file
if excel.ActiveWorkbook:
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 549, in __len__
return self.__dict__["_dispobj_"].__len__()
File "C:\Users\mdelal001\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\__init__.py", line 484, in __getattr__
raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
AttributeError: '<win32com.gen_py.Microsoft Excel 16.0 Object Library._Workbook instance at 0x2298856432688>' object has
no attribute '__len__'
解决方案
推荐阅读
- c# - 从 View 传递给 userManager 的 ID 错误
- javascript - 如何将货币转换为数字
- python - Python 不接受我输入的变量
- java - 如何在一个 java 活动中添加两个覆盖 onActivityResult 方法?
- laravel - Laravel:无法向登录用户发送通知
- java - 为什么在构造函数注入中有太多参数是不好的?
- javascript - Javascript 'For' 循环调试 BEGINNER
- python - 使用 Scipy 最小化返回一个 nan
- node.js - HTTP 请求与 HTTPS 请求的 API 有什么区别?
- rust - 转 Vec
进入 Vec<(&str, u64)> 获取 tui::BarChart 数据