Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appel d'une macro Word 2003 depuis un code python

    12 août 2011 à 10:32:11

    Bonjour à tous,

    Je débute sous python, et je dois "batcher" une macro word en utilisant ce language (Python 3.2)

    J'ai donc décidé d'utiliser la librairie win32com.

    J'ai déclaré la macro Word 2003 de cette forme là:

    Sub merge(path As String)
    Dim i As Integer
     
    With Application.FileSearch
        .LookIn = path 
        .FileName = "*.doc"
        .Execute
        For i = 1 To .FoundFiles.Count
            Documents.Open FileName:=.FoundFiles(i)
            Selection.WholeStory
            Selection.Copy
            Documents(2).Activate
            Selection.Paste
            Documents(1).Activate
            ActiveDocument.Close False
        Next i
        End With
    End Sub
    



    Et j'aimerais appeler cette macro depuis un python, en lui passant en argument le fameux "path".

    J'ai tenté avec ce code là:



    #!/bin/env python
     
    import glob
    import os
    import sys
    from win32com.client import Dispatch
     
     
    wrd = Dispatch('Word.Application')
    newDoc = Dispatch('Word.Document')
    path = "c:\\input"
    wrd.visible = 0
     
    macro_to_run = "merge"
    print("Application de la macro " + macro_to_run)
    doc = wrd.Documents.Add
    newDoc.SaveAs("C:\\test.doc")
     
    wrd.Run(macro_to_run, (path,))
     
    newDoc.SaveAs("C:\\toto.doc")
    newDoc.Close()
    wrd.Quit()
    print("Fin de l'application de la macro")
    


    Ce qui me donne droit à un magnifique:

    Traceback (most recent call last):
      File "C:\Documents and Settings\VMWare01\Bureau\pydocmerge.py", line 19, in <module>
        wrd.Run(macro_to_run, (path,))
      File "<COMObject Word.Application>", line 14, in Run
      File "C:\Python32\lib\site-packages\win32com\client\dynamic.py", line 276, in _ApplyTypes_
        result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
    pywintypes.com_error: (-2147352567, "Une exception s'est produite.", (0, None, None, None, 0, -2147352571), 2)


    Où se trouve mon erreur? Dans la macro? Dans le python? Est-il seulement possible d’appeler des macros avec arguments?

    Merci pour votre aide!
    • Partager sur Facebook
    • Partager sur Twitter

    Appel d'une macro Word 2003 depuis un code python

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown