使用 XLWings 进行并行处理

Using XLWings with parallel processing

所以我是并行处理的新手,但我开始使用它来同时解析多个 Excel 文件。当我只使用 openpyxl 时它工作得很好,但据我所知,这是一个基本的 XML 解析器。当我包含使用 XLWings 的部分时(我喜欢利用它在 Excel 中评估方程式的能力来进行文件验证),我收到以下错误:

pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, None)

这大致是我用来初始化新的 XLWings 实例并加载工作簿的代码:

def openWorkbook(self, filePath):
    app = xw.apps.add()
    app.display_alerts = False
    app.screen_updating = False
    wb = self.app.books(filePath) #Note that this is called only once for each workbook.
    app.screen_updating = True
    app.quit()

有没有办法让 XLWings 同时打开 Excel 的多个实例?我应该尝试做类似 this 的事情吗?如果是这样,我不确定初始化如何将线程交给 XLWings。

所以我想出了解决办法,其实非常简单。我刚刚在 xw.apps.add() 调用之前从 pythoncom 包中添加了 pythoncom.CoInitialize()

ParallelProcessController.py

from multiprocessing.dummy import Pool
from LoadWorkbook import openWorkbook

def callOpenWorkbookInParallel(self, lsExcelFiles):
    pool = Pool(processes=3)
    
    pool.map(openWorkbook, lsExcelFiles)

LoadWorkbook.py

import xlwings as xw
import pythoncom

def openWorkbook(self, filePath):
  
  pythoncom.CoInitialize()

  app = xw.apps.add()
  wb = app.books(filePath)
  app.quit()