4

Python と組み合わせて VBA を使用しています。

モジュールOSをインポートし、Excelで作業するために-openpyxlを使用しました。この問題は、Excel から VBA マクロを実行するための関数を反復するときに発生します。

import random
from openpyxl import load_workbook
import os, os.path, win32com.client

wbi = load_workbook('Input.xlsm')
wsi = wbi.get_active_sheet()
wbo = load_workbook('Output.xlsx')
wso = wbo.get_active_sheet()

def run_macro(fName, macName, path=os.getcwd()):
    """    
    pre: fName is the name of a valid Excel file with macro macName
    post: fName!macName is run, fName saved and closed
    """
    fName = os.path.join(path, fName)
    xlApp = win32com.client.Dispatch("Excel.Application")
    fTest = xlApp.Workbooks.Open(fName)
    macName = fTest.Name + '!' + macName
    xlApp.Run(macName)
    fTest.Close(1)
    xlApp.Quit()
    xlApp = None

def IBP():
    ibp = wsi.cell('G12')
    ibpv = random.randint(0,45)
    ibp.value = ibpv
    return ibp.value

def BP10():
    bp10 = wsi.cell('G13')
    bpv10 = random.randint(30,50)
    bp10.value = bpv10
    return bp10.value

for n in range(6):
    IBP()
    print IBP()
    BP10()
    run_macro('Input.xlsm','macro1')
    wbo.save('Output.xlsx')

エラーが発生していると思いますrun_macro('Input.xlsm','macro1')-反復できません。

出力:

Qt: Untested Windows version 6.2 detected!
35
4
Traceback (most recent call last):
  File "C:\Users\User\Desktop\Python Exp\Pr 1.py", line 77, in <module>
    run_macro('Input.xlsm','macro1')
  File "C:\Users\User\Desktop\Python Exp\Pr 1.py", line 18, in run_macro
    fTest = xlApp.Workbooks.Open(fName)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 522, in __getattr__
    raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: Excel.Application.Workbooks

私は何を間違っていますか?

4

1 に答える 1

1

これが役立つかどうかはわかりませんが、事前バインディングを試すことができます。このスクリプトを実行してから、もう一度試してください。

import win32com.client

xl = win32com.client.gencache.EnsureDispatch ("Excel.Application")
print xl.__module__

それが機能しない場合は、次のように Excel にフックすることで、いつでも遅延バインディングに戻ることができます。

xl = win32com.client.dynamic.Dispatch("Excel.Application")

または、単にこのフォルダーを削除することによって:C:\Python27\Lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x7

エラー メッセージから、問題が発生しているようwb = xlApp.Workbooks.Open(fname)です。Excel com サーバーへの Python フックが正しく機能している場合、その行は例外を発生させませんでした。例外が発生したコードに問題はありません。このような状況では、事前バインディングが役立つ場合があります。

幸運を

マイク

于 2012-12-19T20:40:34.770 に答える