如何在Excel中调用Python脚本,实现数据自动化处理
导读:这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作。
![](https://filescdn.proginn.com/5cfcec14df6c13fae154a46f14654028/dff25ccf6c1626a126a9f79390eecbd1.webp)
![](https://filescdn.proginn.com/677f58b109779d2d7868052850a18ff9/ce7bd159bbfd312b4ca0a5154c51d78a.webp)
![](https://filescdn.proginn.com/fd7a1933f5c3200faed28b4fdc7e5f9e/d54bef8e27be2128dc74a7b937795c45.webp)
如果你对VBA不算精通,你可以直接使用Python编写分析函数用于Excel运算,而无需使用VBA; Python相比VBA运行速度更快,且代码编写更简洁灵活; Python中有众多优秀的第三方库,随用随取,可以节省大量代码时间;
![](https://filescdn.proginn.com/a6161e4e104cccd8dfc2b0a22c421ab4/87609b6bfc9e4e0dafedae42064a630b.webp)
![](https://filescdn.proginn.com/3bb41658d74b5f5389c64cd5f59bc629/a54dd2dc96272c99296999256c72ccbc.webp)
pip install python
xlwings addin install
![](https://filescdn.proginn.com/6bf38f2aa0c06cb814e5e6846b24eb8b/a365688b99e424c8f17d4265a647fb5d.webp)
![](https://filescdn.proginn.com/3673a65166d5cde64cc210ed3d13d375/0703c0e9ab6664a73e2fbcd136474b30.webp)
在"文件"选项卡上,转到"自定义>选项"。 在“自定义功能区”和“主选项卡”下,选中“开发工具”复选框。
![](https://filescdn.proginn.com/48e2ec8f05b91e625803950421cb6796/26aec91872757f9e79dd1b110cd90603.webp)
xlwings quickstart ProjectName
![](https://filescdn.proginn.com/128f8a65a8c005a0f10a8e602add0e65/dd89b331d6e115f5f6273f57198be46b.webp)
![](https://filescdn.proginn.com/b67a0836459f7c0f52e6dd079d1eabc3/abab9e1da4a1e475536eaab4306f8d77.webp)
![](https://filescdn.proginn.com/0251af22f35d167ed5792e1b3964ce85/f978e7fbdbf54ded39e32e67a3164b61.webp)
Sub SampleCall()
mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
RunPython "import " & mymodule & ";" & mymodule & ".main()"End Sub
在.xlsm文件相同位置查找相同名称的.py文件 调用.py脚本里的main()函数
import xlwings as xw
import pandas as pd
def main():
wb = xw.Book.caller()
values = ['a','b','c','d','e']
wb.sheets[0].range('A1').value = values
@xw.func
def hello(name):
return f"Hello {name}!"
if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()
![](https://filescdn.proginn.com/3a809422cf8f2d7e5982c5000e63b5f3/2e4c2d28ed553cb09b737825f33f39dd.webp)
![](https://filescdn.proginn.com/fbcd773e355b7e66528ec004f1c6b121/1333e19cb61255a676592164de3a153b.webp)
![](https://filescdn.proginn.com/be13ff1bf1c78a1e75271cf9283e2bed/c3be7283fc45a28f009586e408035f40.webp)
![](https://filescdn.proginn.com/fbbde4c69228723b6640b736144f8d19/0cdcb16c3316cb553a551dc9eaddcc8e.webp)
import xlwings as xw
import pandas as pd
def main():
wb = xw.Book.caller()
df = pd.read_csv(r"E:\\test\\PythonExcelTest\\iris.csv")
df['total_length'] = df['sepal_length'] + df['petal_length']
wb.sheets[0].range('A1').value = df
@xw.func
def hello(name):
return f"Hello {name}!"
if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()
![](https://filescdn.proginn.com/4c3562910886e777351dc68f914ea0f7/9c1a480438bbf209cfc29c2fcd40b595.webp)
延伸阅读👇
延伸阅读《利用Python进行数据分析》
评论