在Excel中有很多有趣好玩的函数,比如求和、求平均数等函数。当这些函数不能满足工作需要时,我们都会使用VBA开发自定义函数来满足。比如说汉字转拼音的功能。接下来我们使用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函数了,如图所示。
图-求和和平均数
图- 汉字转拼音