3

2007 xlsmファイル内にマクロがあり、呼び出されると、ソルバー構成(ターゲット、制約など)が作成され、ユーザーの操作なしでソルバーが実行されます。Excelから手動で実行する場合、これは正常に機能します。

これをPythonovercomからスクリプト化したいと思います。ただし、Pythonコードがソルバーマクロを呼び出す場合:

app.Run("runSolver()")

それは失敗します:

foob​​ar.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安全であることを確認できます)。

4

1 に答える 1

4

MSDN Excel Developers forumに投稿した後、最終的に解決策を見つけました。そして解決策は非常に簡単でした:

ソルバーを次のように実行する代わりに:

app.Run("runsolver()")

どうやらブラケットをドロップして、次のように実行する必要があります。

app.Run("runsolver")

図に行きます。

于 2011-07-21T11:40:55.470 に答える