2007 xlsmファイル内にマクロがあり、呼び出されると、ソルバー構成(ターゲット、制約など)が作成され、ユーザーの操作なしでソルバーが実行されます。Excelから手動で実行する場合、これは正常に機能します。
これをPythonovercomからスクリプト化したいと思います。ただし、Pythonコードがソルバーマクロを呼び出す場合:
app.Run("runSolver()")
それは失敗します:
foobar.xlsmの解決に失敗しました、エラーメッセージ:モデルのエラー。すべてのセルと制約が有効であることを確認してください。
の呼び出し時にPython環境にブレークポイントを設定し、Run()
Excelから手動でマクロを実行すると、正常に機能するため、ソルバーの構成が間違っていることはありません。
エラーメッセージはソルバーのWebサイトにリストされていますが、シートが手動で正常に解決されるため、適用されないと思います。
このページは、comを介して呼び出すときに、ソルバー環境がまだセットアップされていないことを示しています。ただし、追加
Application.Run "Solver.xla!Solver.Solver2.Auto_open"
私のソルバーマクロの最初の行は、より一般的な結果になります。
File "c:\python26\lib\site-packages\win32com\gen_py\00020813-0000-0000-C000-000000000046x0x1x6.py", line 35061, in Run
, Arg26, Arg27, Arg28, Arg29, Arg30
File "c:\python26\lib\site-packages\win32com\client\__init__.py", line 456, in _ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2146827284), None)
では、正しいことは何ですか?
編集:
私はそれを再現可能なテストケースに分離しました:
Pythonコード:
from win32com.client import Dispatch
if __name__ == '__main__':
app = Dispatch("Excel.Application")
app.Visible = True
app.Workbooks.Open(r'C:\path\to\testsolver.xlsm')
app.Run("runsolver()")
Excelファイル:http ://dl.dropbox.com/u/3142953/testsolver.xlsm (マクロを無効にして開いて、単純なサブを調べてmodule1
安全であることを確認できます)。