首页 > 解决方案 > 来自 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__'

标签: pythonexceluser-interface

解决方案


推荐阅读