欢迎光临散文网 会员登陆 & 注册

Word VBA:结合网友的自定义函数对汉字批量增 / 删拼音

2022-11-28 22:22 作者:ch_j  | 我要投稿

一、已有方法

1.Word中有对汉字加拼音的方法——拼音指南

通过这种方法手动加拼音是有字符串长度的限制的,因此很多网友基于此也写过VBA自动化批量添加拼音的方法。

常规方法代码截图

2.常规方法的不足——耗时太长

此文法当然可用,存在的不足也非常明显,因为需要用sendkeys方法,模拟键盘操作,所以非常耗时。

我们对下面这段测试文本,用此方法加拼音,来测试一下耗时情况:

视频提供了功能强大的方法帮助您证明您的观点。当您单击联机视频时,可以在想要添加的视频的嵌入代码中进行粘贴。您也可以键入一个关键字以联机搜索最适合您的文档的视频。
常规方法耗时测试

可以看到耗时25.305秒。这个代码是非常耗时的,一页通用A4纸至少有这段文字的4-5倍多,也就是说,完成一页汉字加拼音,至少是100-125秒。那么对于多页甚至多份文档来说,此方法速度可能就不能满足我们的需求了。

除此之外,此方法很难设置拼音的对齐方式、字体、字号、位置等各项参数,基本只能使用默认值。

二、新的思路

1.思路

可以运用汉字与拼音的映射关系,自己写一个函数,然后对我们要处理的汉字可以立刻找到对应的拼音。然后用Word VBA中的拼音指南方法Range.PhoneticGuide方法进行加拼音。

这种方法不用模拟键盘,每个汉字发送一次,所以运行速度上有非常大的提升。

因为具体的方法中又有多种方法(后面代码中举例了2种,可见详情),那么我们同样用前面测试的文字进行一下测试:

(1)调用函数但未用正则

调用函数但不用正则方法耗时

耗时约0.188-0.19秒,速度快了许多。

(2)调用函数且用正则方法

调用函数且用正则方法耗时

耗时约0.156秒,速度更快。

可以看到用新的自定义函数获取拼音,用正则优化速度,都可以加快代码运行速度,可以满足一般的办公自动化需求。

2.示例代码

三、说明

1.上述完整代码中,第一部分——函数部分并非本人原创,是网友中的大佬提供的,非常感谢大佬分享。主要就是根据汉字与拼音的映射关系获取汉字的拼音。

2.如果使用正则,速度确实相当快,但是最好是在纯文本文档中使用;如果在有各种形状、图片、表格、域等复杂对象的文档中,不建议使用,因为有可能出现某些错误。后面有时间再和大家分享可能的错误。

3.代码中删除拼音指南也提供了两种方法,可以看相应批注和测试。

4.对于多音字,还是需要人工校对,虽然自定义函数可以获取多音字的多个读音,但精确匹配,需要代码量就更大,所以本文没有进行进一步处理。

5.这些方法都不一定是最优解,如果有更好的方法,也欢迎大家多多分享,共同探讨。


如果您有VBA/Office/办公自动化问题,欢迎提问和一起交流。

Word VBA:结合网友的自定义函数对汉字批量增 / 删拼音的评论 (共 条)

分享到微博请遵守国家法律