首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用XLWings并行处理

利用XLWings并行处理
EN

Stack Overflow用户
提问于 2017-10-05 14:40:38
回答 1查看 2.1K关注 0票数 0

所以我对并行处理很陌生,但我开始让它同时解析多个Excel文件。当我只使用openpyxl时,它可以很好地工作,但据我所理解,这是一个基本的XML解析器。当我包含使用XLWings的部分(我喜欢利用它在Excel中为文件验证目的计算方程的能力)时,我得到以下错误:

代码语言:javascript
复制
pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, None)

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

代码语言:javascript
复制
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进行初始化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-10 13:50:17

所以我想出了解决办法,其实很容易。我只是在pythoncom.CoInitialize()调用之前从pythoncom包中添加了xw.apps.add()

ParallelProcessController.py

代码语言:javascript
复制
from multiprocessing.dummy import Pool
from LoadWorkbook import openWorkbook

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

LoadWorkbook.py

代码语言:javascript
复制
import xlwings as xw
import pythoncom

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

  app = xw.apps.add()
  wb = app.books(filePath)
  app.quit()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46588421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档