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!
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.