在上一篇我們已經(jīng)配置好了環(huán)境藐俺,本篇我們進(jìn)入實(shí)戰(zhàn)。
在進(jìn)入實(shí)戰(zhàn)之前泥彤,要聲明一點(diǎn)欲芹,雖然本篇有較多的篇幅來講述如何使用Excel調(diào)用Python腳本,但是這個(gè)功能在實(shí)際工作中的應(yīng)用場景極其有限吟吝,建議大家了解即可菱父。
對于xlwings的學(xué)習(xí)和使用,我們應(yīng)該把更多的精力放在如何通過Python操作Excel上(后續(xù)篇章會(huì)著重介紹)剑逃,這才是我們實(shí)現(xiàn)辦公自動(dòng)化的方式浙宜。
Excel調(diào)用Python腳本
1. 無返回值的函數(shù)
1-1. 新建Py腳本
新建一個(gè)txt文檔并打開,然后復(fù)制下面的代碼進(jìn)去
import numpy as np
import xlwings as xw
def world():
wb = xw.Book.caller()
wb.sheets[0].range('A1').value = 'Hello World!'
這段代碼的含義是:在當(dāng)前Excel文件的第一個(gè)工作表A1單元格輸入Hello World!
然后將文件另存為code.py蛹磺,保存在與Excel文件相同的目錄下
新建py文件的方式有很多種粟瞬,對于使用Python編輯器的同學(xué)來說,通過編輯器創(chuàng)建更加方便萤捆。
1-2. 調(diào)用Py腳本
首先裙品,我們打開VBA編輯器的俗批,輸入以下代碼:
Sub HelloWorld()
RunPython ("import code; code.world()")
End Sub
這段代碼的含義是:調(diào)用code.py腳本中的world函數(shù)
按下F5運(yùn)行程序
演示流程如下
2. 有返回值的函數(shù)
2-1. 新建py文件
import os
import xlwings as xw
@xw.func
def cwf():
return os.getcwd()
上面這段代碼含義:獲取py文件所在的文件夾路徑。
2-2. 單元格中調(diào)用py代碼
首先在UDF Modules方框里輸入code市怎,表明我們要調(diào)用的文件名岁忘,然后點(diǎn)下圖箭頭所指Import Functions按鈕(這個(gè)過程會(huì)彈出一個(gè)黑色窗口,我們不用理它)
然后区匠,在任意單元格輸入 =cwf() 即可調(diào)用code文件里cwf函數(shù)干像,結(jié)果返回當(dāng)前文件路徑,如下圖所示
如果我們更改了code.py中的代碼驰弄,記得要重新點(diǎn)擊Import Functions按鈕麻汰,以便將修改內(nèi)容同步過來。
下面是流程演示:
OK揩懒,以上就是在Excel中調(diào)用Python的完整流程什乙,下面介紹如何在Python中調(diào)用VBA
Python中調(diào)用VBA腳本
整個(gè)過程非常簡單,只需要兩步即可已球,首先我們先編寫VBA代碼臣镣,然后在Python中調(diào)用就可以了
1. 編寫VBA代碼
打開VBA代碼編輯器,新建一個(gè)模塊(插入 - 模塊)智亮,然后輸入以下代碼
Function MySum(x, y)
MySum = x + y
End Function
如圖所示忆某,然后將Excel保存關(guān)閉,注意要保存為xlsm格式
2. 在Python中調(diào)用
在Python編譯器中輸入以下代碼阔蛉,然后運(yùn)行
import xlwings as xw
app = xw.App(visible=True,add_book=False)
'設(shè)置測試文件的路徑
wb = app.books.open(r'C:/Users/zhoux/Desktop/test.xlsm')
'調(diào)用VBA腳本
my_sum = wb.macro('MySum')
my_sum(1, 2)
流程演示如下:
Python與Excel的交互到此為止就介紹完了弃舒,其實(shí)到目前為止,我們介紹的這些功能都是“小菜”状原,大家了解即可聋呢,真正的“硬菜”是使用xlwings來實(shí)現(xiàn)Python對Excel的全面操控。這部分教程我們會(huì)在后面的篇章繼續(xù)介紹颠区。