Я пишу, потому что, казалось бы, обыскав половину интернета, я не мог понять, почему этот простой фрагмент кода не работает:
from win32com.client import Dispatch
def RunExcelMacro(name):
myExcel = Dispatch('Excel.Application')
myExcel.Visible = 0
myExcel.Workbooks.Add('C:\AC_Software\TestDatei.xls')
myExcel.Run(name)
myExcel.DisplayAlerts = 0
myExcel.Quit()
if __name__ == "__main__":
RunExcelMacro('Makro_test')
Предполагается запустить vba-скрипт "Makro_test", содержащийся в файле Excel "TestDatei.xls". Я пробовал разные комбинации версий Python и Java (32- и 64-битные) на настольном компьютере с 64-битной Windows 7 в моем офисе. Я также пробовал разные комбинации косой черты и обратной косой черты в пути (обратная и прямая косая черта, простая, двойная). К сожалению, сообщение об ошибке на немецком языке. Но на случай, если кто-то из вас сможет обнаружить что-нибудь из этого, вот оно:
Traceback (most recent call last):
File "C:\Users\alloun\workspace\MyTestProject\root\nested\example.py", line 22, in <module>
RunExcelMacro('Makro_test')
File "C:\Users\alloun\workspace\MyTestProject\root\nested\example.py", line 16, in RunExcelMacro
myExcel.Workbooks.Add('C:\AC_Software\TestDatei.xls')
File "<COMObject <unknown>>", line 2, in Add
pywintypes.com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, u'Microsoft Excel', u"'TestDatei.xls' wurde nicht gefunden. \xdcberpr\xfcfen Sie die Rechtschreibung des Dateinamens, und \xfcberpr\xfcfen Sie, ob der Speicherort der Datei korrekt ist.\n\nWenn Sie versuchen, die Datei \xfcber die Liste der zuletzt ge\xf6ffneten Dateien zu \xf6ffnen, stellen Sie sicher, dass die Datei nicht umbenannt, verschoben oder gel\xf6scht wurde.", u'xlmain11.chm', 0, -2146827284), None)
'C:\AC_Software\TestDatei.xls'
наr'C:\AC_Software\TestDatei.xls'
или'C:\\AC_Software\\TestDatei.xls'
. Но поскольку иA
, иT
написаны в верхнем регистре, это должно быть что-то другое... - person glglgl   schedule 27.11.2012'\a\A\t\T'
разрешается в'\x07\\A\t\\T'
, поэтому\A\T
разрешается в\\A\\T
. - person glglgl   schedule 27.11.2012