安装
pip install xlwings
或者
conda install xlwings
或者为了安装最新版本
conda install -c conda-forge xlwings
1.脚本:通过Python与Excel交互
建立与工作簿的连接:
>>> import xlwings as xw
>>> wb = xw.Book() # 这将创造一个新的工作簿
>>> wb = xw.Book('FileName.xlsx') # 连接到当前工作目录中的现有文件
>>> wb = xw.Book(r'C:pathtofile.xlsx') # 在Windows上:使用r进行转义
如果您在两个Excel实例中打开了相同的文件,则需要完全限定它并且包含应用程序实例。 您可以通过xw.apps.keys()找到您的应用程序实例密钥(PID):
>>> xw.apps[10559].books['FileName.xlsx']
实例化工作表对象:
>>> sht = wb.sheets['Sheet1']
这样从表格读取/写入值就很容易了:
>>> sht.range('A1').value = 'Foo 1'
>>> sht.range('A1').value
'Foo 1'
我们还可使用有许多便利功能,例如 表格范围扩大:
>>> sht.range('A1').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]
>>> sht.range('A1').expand().value
[['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]
还可以与Pandas、Numpy一起用
>>> import pandas as pd
>>> df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
>>> sht.range('A1').value = df
>>> sht.range('A1').options(pd.DataFrame, expand='table').value
a b
0.0 1.0 2.0
1.0 3.0 4.0
还可以在excel表格内使用matplot绘制图
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> plt.plot([1, 2, 3, 4, 5])
[<matplotlib.lines.Line2D at 0x1071706a0>]
>>> sht.pictures.add(fig, name='MyPlot', update=True)
<Picture 'MyPlot' in <Sheet [Workbook4]Sheet1>>
活动工作表的快捷方式:xw.Range
如果您想快速与活动工作簿中的活动工作表格进行对话,则无需实例化工作簿和工作表对象,只需执行以下操作:
>>> import xlwings as xw
>>> xw.Range('A1').value = 'Foo'
>>> xw.Range('A1').value
'Foo'
注意:与Excel交互时,仅应使用xw.Range。 在脚本中,应始终遍历书本和图纸对象,如上所示。
2.宏:从Excel调用Python
你可以通过单击外接程序中的“运行”按钮(v0.16中的新增功能)或使用RunPython函数从VBA调用Python函数:“运行”按钮在Python模块中需要一个名为main的函数,该函数与您的工作簿同名。
这种方法的优点在于,您不需要工作簿启用宏,而可以将其保存为xlsx。
如果要调用任何Python函数,无论它位于哪个模块中或具有什么名称,请使用RunPython:
Sub HelloWorld()
RunPython ("import hello; hello.world()")
End Sub
默认情况下,RunPython需要hello.py与Excel文件位于同一目录中,但是您可以通过config进行更改。 通过使用xw.Book.caller来参考调用Excel工作簿:
# hello.py
import numpy as np
import xlwings as xw
def world():
wb = xw.Book.caller()
wb.sheets[0].range('A1').value = 'Hello World!'
要运行此程序,您需要安装xlwings加载项。 进行所有设置的最简单方法是从Windows上的命令提示符或Mac上的终端使用xlwings命令行客户端:xlwings quickstart myproject。
有关加载项的详细信息,请参见加载项:
Add-in - xlwings dev documentationdocs.xlwings.org
3. UDF:用户定义的功能(仅Windows)
用Python编写UDF很容易:
import xlwings as xw
@xw.func
def hello(name):
return 'Hello {0}'.format(name)
转换器也可以与UDF一起使用。 再次以Pandas DataFrame为例:
import xlwings as xw
import pandas as pd
@xw.func
@xw.arg('x', pd.DataFrame)
def correl2(x):
# x arrives as DataFrame
return x.corr()
通过单击xlwings加载项的导入按钮将该功能导入Excel:有关更多详细信息,请参见VBA:用户定义的功能(UDF):
VBA: User Defined Functions (UDFs)docs.xlwings.org