win32com调用VBA方式
更换调用库的原因
原本在写代码的时候,用的是xlwings库,但调用该库后用pyinstaller时会出错,即卡在
142754 INFO: Building PKG (CArchive) PKG-00.pkg
详情参见资料,如有懂行的伙伴,可以帮忙解答下
目前没有找到相应解决办法,故更换调用VBA函数xlsxwriter
参考资料
https://ask.csdn.net/questions/7479757?mustype=
win32com调用VBA方式
VBA部分
在excel的宏编程中编辑如下程序以便调用
Function MySum(x, y)
'两个简单字符传参
MySum = x + y
Range("D1").Value = MySum
End Function
Function MySum1()
'不需要传参
MySum1 = 3 + 7
Range("D2").Value = MySum1
End Function
Function MySum2(x, y)
'一个简单字符,一个列表数组
MySum2 = x
For i = 0 To 1
MySum2 = MySum2 + y(i)
Next
Range("D3").Value = MySum2
End Function
python调用
在python中调用VBA需打开相应的excel文件才可以使用,即通过python操作xlsm文件运行
import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
# 调用过程可视
xl.Visible = True
# 带有宏编程的excel文件地址
Path = "D:\\Users\\yang\\Desktop\\Technology\\Demo\\Python\\text\\test\\test.xlsm"
# 打开相应文件
xl.Workbooks.Open(Filename=Path)
# 预设参数
param1 = 4
param2 = 5
param3 = [1,2]
# 调用VBA中的MySum function
xl.Application.Run("MySum", param1, param2)
# 调用VBA中的MySum1 function
xl.Application.Run("MySum1")
# 调用VBA中的MySum2 function
xl.Application.Run("MySum2", param1, param3)
win32com打开excel文件后关闭
如果单纯用 xl ,无法使用Close和Save,这两个命令。
import win32com.client
import os
xl=win32com.client.Dispatch("Excel.Application")
xl.Visible = True
Path = os.getcwd()+"/test.xlsm"
# wb为了单独处理excel,xl是处理窗口
wb=xl.Workbooks.Open(Filename=Path)
wb.Save()
wb.Close()
xl.Quit()
参考资料:
http://pythonexcels.com/python-excel-mini-cookbook/
python打开excel执行vba代码_python与macro宏调用