3

私が書いているのは、一見インターネットの半分を検索した後、この単純なコードが機能しない理由を理解できなかったからです。

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

2 に答える 2

0

英語のエラー メッセージは次のとおりです。

pywintypes.com_error: (-2147352567, '例外が発生しました.', (0, u'Microsoft Excel', u"'TestDatei.xls' が見つかりませんでした。ファイル名のスペルを確認し、ファイルの場所が正解です。\n\n最近使用したファイルのリストからファイルを開こうとしている場合は、ファイルが名前変更、移動、または削除されていないことを確認してください。", 'xlmain11.chm', 0, -2146827284) 、 なし)

パスが正しいことを確認し、r'C:\AC_Software\TestDatei.xls'代わりに生の文字列を試してください。私は同じコードを試してみましたが、私が持っていたファイルで動作しました。

于 2012-11-27T16:40:54.153 に答える
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()
于 2014-02-20T23:51:17.237 に答える