通过com从Python调用Excel宏/ Excel Solver
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过com从Python调用Excel宏/ Excel Solver,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1698字,纯文字阅读大概需要3分钟。
内容图文
我在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")
去搞清楚.
内容总结
以上是互联网集市为您收集整理的通过com从Python调用Excel宏/ Excel Solver全部内容,希望文章能够帮你解决通过com从Python调用Excel宏/ Excel Solver所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。