python - 使用参数 : Python win32com API 调用宏

标签 python excel python-2.7 automation pywin32

我想做的是从我的 python 代码中调用一个宏。这是来源的示例:

xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = 1
xl.Workbooks.Open("C:\\Program Files\\Microsoft Office\\Office14\\XLSTART\\perso.xlsm")
xl.Workbooks.Open(argv[1])
xl.Application.Run('perso.xlsm!' + argv[2])
xl.Application.Run('perso.xlsm!' + argv[2] + '2')
xl.Workbooks.Open(argv[0])
xl.Application.Run('perso.xlsm!aggregate_report_ouverture_appli')
xl.Application.Run('perso.xlsm!macro', 'lol')
xl.Save()
xl.Quit() 

前两个宏运行良好。但最后一个需要设置一个参数(在本例中为“lol”)。尝试一下:

xl.Application.Run('perso.xlsm!macro', 'lol')

我的宏被调用但参数没有设置。知道如何执行此操作或在哪里可以找到此模块的“javadoc”(是的,我来自 Java 世界!)。

如果您需要更多解释,请告诉我。

谢谢。

达米安。

最佳答案

不幸的是,在这种情况下,关于 excel 的 win32com 的完整文档不存在;您将不得不查看 MS office Excel MSDN 的大部分内容(这还不错,您有时只需要修改代码):

http://msdn.microsoft.com/en-us/library/office/bb149081(v=office.12).aspx

关于您的问题,请考虑采用两个参数的示例宏:

Sub Proc(sParam1 As String, iParam2 As Integer)
        MsgBox sParam1 & " is " & iParam2 & " Years Old"
End Sub

宏有两个正在寻找的参数。以下 python 代码将使用参数集调用宏:

import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Visible = True
Path = "C:\\Program Files\\Microsoft Office\\Office14\\XLSTART\\perso.xlsm"
xl.Workbooks.Open(Filename=Path)
param1 = "Jeremy"
param2 = 3
xl.Application.Run("Proc", param1, param2)

我不确定你的例子中的宏期望的变量类型是什么,但'lol'是,但它在你的示例中作为字符串从 python 发送到宏。希望这会有所帮助。

关于python - 使用参数 : Python win32com API 调用宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16717635/

相关文章:

python - 使用 Python 替换控制台的第一行

python - xlrd在其他Excel文件中查找Excel值

python - Try-finally 装饰器清理 python 对象

python - setuptools 在安装过程中发现错误的包

python - 如何使用子进程强制 python 释放内存?

python - 应用引擎 : Memcache design to ensure fast read and high write throughput

python - 为什么 numpy.random.choice 这么慢?

vba - 简单的 VBA : Add and Name a Worksheet for Keys in Dictionary

c# - 如何将值设置为二维 Excel 范围?

vba - 在文件夹中搜索时排除系统和打开的文件