长话短说:我一直在与 xlwings 作斗争,当我尝试填充现有电子表格模板时出现随机错误——它的多个独特实例! -- 具有来自同时执行的不同 Python 脚本的值。因此,请考虑使用具有相同形状的独特数据填充模板中的工作表(驱动数据透视表/图表)的多个脚本。例如,假设您有来自 10 个地方的相同格式的天气数据,并且您想要使用这些数据基于一个通用模板创建 10 个不同的带有数据透视表的 xlsx 文件。
同样,这在按顺序运行脚本时效果很好。但是当并行运行它们时(在 Windows 中),使用批处理文件中的“启动”命令,随机错误发生,我留下了挂起的 Excel 实例。
错误如下所示。任何其他/更好的方法/库来完成这个?否则这不会扩展......
Traceback (most recent call last):
File "Production.py", line 1246, in <module>
UpdateXLSMasterTemplatesAndSave(stXLSTemp,stOutputFile,dfResults)
File "Production.py", line 1124, in UpdateXLSMasterTemplatesAndSave
ws.range('A1').options(index=True).value = dfIn
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 2411, in value
conversion.write(data, self, self._options)
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\conversion\__init__.py", line 102, in write
pipeline(ctx)
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\conversion\framework.py", line 79, in __call__
stage(*args, **kwargs)
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\conversion\standard.py", line 73, in __call__
ctx.range = ctx.range.resize(len(ctx.value), len(ctx.value[0]))
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 2697, in resize
return Range(self(1, 1), self(row_size, column_size)).options(**self._options)
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 1804, in __init__
impl = cell1.sheet.range(cell1, cell2).impl
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 1435, in range
if cell2.sheet != self:
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 1375, in __ne__
return not self.__eq__(other)
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 1370, in __eq__
and self.book == other.book
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 985, in __eq__
and self.name == other.name
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\main.py", line 1104, in name
return self.impl.name
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\_xlwindows.py", line 834, in name
return self.xl.Name
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\xlwings\_xlwindows.py", line 198, in __getattr__
v = getattr(self._inner, item)
File "C:\Users\stats\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 628, in __getattr__
ret = self._oleobj_.Invoke(retEntry.dispid, 0, invoke_type, 1)
pywintypes.com_error: (-2147417848, 'The object invoked has disconnected from its clients.', None, None)
如前所述;试图确保我在每个线程中为模板使用不同的物理文件——没有效果……