python调用excel宏_通过com从Python调用Excel宏/ Excel Solver

我在2007 xlsm文件中有一个宏,该宏在调用时会创建一个求解器配置(目标,约束等),并且无需任何用户交互即可执行求解.从Excel手动运行时,可以正常工作.

我现在想通过com上的Python编写脚本.但是,当Python代码调用resolver宏时:

app.Run("runSolver()")

它失败并显示:

foobar.xlsm failed to solve, error message: Error in model. Please

verify that all cells and constraints are valid.

如果我在调用Run()的Python环境中设置了一个断点,然后从Excel手动运行该宏,则它可以正常工作,因此求解程序的配置不会错.

错误消息列出为on the solver website,但我认为它不适用,因为工作表可以手动解决.

This page suggests通过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中的简单子以验证其安全性).

解决方法:

在MSDN Excel Developers forum上发布后,我终于找到了解决方案.该解决方案简直微不足道:

而不是像这样运行求解器:

app.Run("runsolver()")

您显然必须放下括号并像这样运行它:

app.Run("runsolver")

去搞清楚.

标签:solver,com,win32com,python,excel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值