2017-10-05 4 views
0

Je suis donc nouveau dans le traitement parallèle, mais je commençais à l'utiliser pour analyser simultanément plusieurs fichiers Excel. Cela fonctionne bien quand je n'utilise que openpyxl, mais c'est un analyseur XML de base tel que je le comprends. Quand j'inclus la partie qui utilise XLWings (je tiens à profiter de sa capacité à évaluer des équations dans Excel à des fins de vérification de fichiers), je reçois l'erreur suivante:Utilisation de XLWings avec traitement parallèle

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

C'est à peu près le code que j'utilise pour initialiser une nouvelle instance de XLWings et charger un classeur:

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() 

Est-il possible d'obtenir XLWings d'ouvrir plusieurs instances simultanées d'Excel? Devrais-je essayer de faire quelque chose comme this? Si c'est le cas, je ne suis pas sûr de savoir comment l'initialisation fonctionnerait en donnant des threads à XLWings.

Répondre

1

Donc, j'ai trouvé la solution, c'était étonnamment facile. Je viens d'ajouter pythoncom.CoInitialize() du paquet pythoncom avant mon xw.apps.add() appel:

ParallelProcessController.py

LoadWorkbook.py

import xlwings as xw 
import pythoncom 

def openWorkbook(self, filePath): 

    pythoncom.CoInitialize() 

    app = xw.apps.add() 
    wb = app.books(filePath) #Note that this is called only once for each workbook. 
    app.quit()