2012-11-27 81 views
3

我写这封信是因为后看似搜索一半的互联网剧本,我无法弄清楚为什么这个简单的代码是不工作:的Python:用于运行Excel VBA脚本不运行

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

它应该运行Excel文件“TestDatei.xls”中包含的vba脚本“Makro_test”。我在办公室的64位Windows 7桌面机上尝试了Python和Java版本(32和64位)的不同组合。我还在路径中尝试了不同的反斜杠和反斜杠组合(反斜杠,简单,双)。不幸的是,错误信息是德文的。但如果你们中的一些可以检测到任何东西了这一点,那就是:

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) 
+4

你试过逃避反斜杠吗? – filmor

+0

我只是想建议用'r'C:\ AC_Software \ TestDatei.xls''或'C:\\ AC_Software \\ TestDatei.xls''替换'C:\ AC_Software \ TestDatei.xls'' 。但是因为'A'和'T'都是大写字母,所以它必须是别的... – glglgl

+1

@FrédéricHamidi你试过了吗?在这里,''\ a \ A \ t \ T''解析为''\ x07 \\ A \ t \\ T'',所以'\ A \ T'解析为'\\ A \\ T'。 – glglgl

回答

0

这里的英文错误消息:

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Excel', u"'TestDatei.xls' could not be found. Check the spelling of the file name, and verify that the file location is correct.\n\nIf you are trying to open the file from your list of most recently used files, make sure that the file has not been renamed, moved, or deleted.", 'xlmain11.chm', 0, -2146827284), None)

确保你的道路是正确的,并尝试原始字符串r'C:\AC_Software\TestDatei.xls'代替。我尝试了相同的代码,并使用了我的文件。

+0

非常感谢您的回答Mark很遗憾,它并没有为我工作:(也许你可以阅读我的最后一条评论,看看有关Python,IDE,我使用的操作系统和JRE对你来说很有意义。 –

0

请参阅下面的代码使用python运行Excel宏。你可以在这个网站 - 链接找到代码。

from __future__ import print_function 
import unittest 
import os.path 
import win32com.client 

class ExcelMacro(unittest.TestCase): 
    def test_excel_macro(self): 
     try: 
      xlApp = win32com.client.DispatchEx('Excel.Application') 
      xlsPath = os.path.expanduser('C:\test1\test2\test3\test4\MacroFile.xlsm') 
      wb = xlApp.Workbooks.Open(Filename=xlsPath) 
      xlApp.Run('macroName') 
      wb.Save() 
      xlApp.Quit() 
      print("Macro ran successfully!") 
     except: 
      print("Error found while running the excel macro!") 
      xlApp.Quit() 
if __name__ == "__main__": 
    unittest.main()