在Excel中有很多有趣好玩的函數,比如求和、求平均數等函數。當這些函數不能滿足工作需要時,我們都會使用VBA開發自定義函數來滿足。比如說漢字轉拼音的功能。接下來我們使用Python/ target=_blank class=infotextkey>Python開發類似功能。
接下來,我們編寫4個函數,求和、求平均數、漢字轉拼音、漢字轉聲調函數。源代碼如下。
import xlwings as xw
import pypinyin
@xw.func
@xw.arg('data',ndim=2)
def py_sum(data):
for row in data:
return row[0]+row[1]
@xw.func
@xw.arg('data',ndim=2)
def py_avg(data):
for row in data:
return (row[0]+row[1])/2
@xw.func
def py_pinyin(word):
s = ''
for i in pypinyin.pinyin(word, style=pypinyin.NORMAL):
s += ''.join(i)
return s
@xw.func
def py_yinjie(word): # 帶聲調的(默認)
s = ''
# heteronym=True不開啟多音字
for i in pypinyin.pinyin(word, heteronym=False):
s = s + ''.join(i) + " "
return s
注意:@xw.arg('data',ndim=2)代碼指不考慮區域的形狀,強制返回值為2維列表。這樣就可以把Excel中的單元格區域轉換為Python中的2維列表,方便處理。
新建
xlwing_call_func_pinyin.xlsm文件,添加xlwings.bas模塊后,點擊菜單“開發工具”下代碼面板上的“宏”按鈕,在彈出界面上, 點擊“ImportPythonUDFs”,點擊“執行”按鈕,這樣會把當前同名文件中的Python函數導入到VBA中來。如圖所示。
圖-導入Python函數
切換到Visual Basic編輯界面,可以看到自動增加了一個模塊xlwings_udfs,如圖所示。
圖-函數導入到Visual Basic編輯環境中
接下來就可以在Excel中隨心所欲地使用Python函數了,如圖所示。
圖-求和和平均數
圖- 漢字轉拼音