ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

    高级搜索
高效办公必会的Office实战技巧 魔方网表,Excel终结者,永久免费 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! 国内首部Excel函数公式学习大典 职场充电黑科技, Office微视频教程 免费下载Excel行业应用视频
300集 易学宝-Office 2010微视频教程 Tableau-数据可视化工具 免费阅读《Excel函数其实很简单Ⅱ》 9门Excel免费公开课任你学
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 免费的Excel考勤计算系统
查看: 213428|回复: 550

[解决多音字]汉字转拼音的完美解决方案[12.11.29更新]

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2007-3-30 10:05 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:文本转换
本帖最后由 ttui 于 2012-11-29 12:17 编辑

请首先确认安装了微软拼音输入法,如果出现注音错误的情况,可尝试安装最新版本微软拼音解决。

[12.01.29]更新
解决看柳絮飘扬提出的bug,全部都是非汉字情况不会再显示#Value,同时非中文字符间也不再插入分隔符。

[11.09.29]更新
根据dul版的分析,加入了运行环境检查,没有运行环境的话会提示安装微软拼音。

[11.09.23]更新
4年来不断有人问多音字的问题,这次更新终于解决了,由于写了这个函数之后我就从来没用到过,遇到些问题就放下了,一拖就这么久,要不是不断有人给我发消息可能就不会再有这次的更新了,还要感谢大家的使用和督促,让各位久等了。
更新后,“重庆重要”能够正确解析为“chóng qìng zhòng yào” 。
这次重写了很多代码,没有过多测试不知道有没有bug,发现bug的同学请给我发消息,谢谢。
代码在32位Win7 + Office2010和WinXp + office2010测试通过,64位的系统应该会出错,就不要测试了。以前遇到过2010下写的VBA代码在之前版本运行会报未找到库之类的错误,代码中注意了,但仍可能会有遗漏,总之,请大家反馈意见,让这个小函数更好的为大家服务。

'***************************************************************************
'*
'* Module:          HzToPy
'* Update:          2011-09-23
'* Author:          tt.t
'*
'* Description:     将中文字符串转换为拼音,就这些。原先这里写了太多废话,删了。
'*
'* Theory:    原理依然是通过IFELanguage接口实现。
'*                  唯一需要解释的是如何解决多音字正确注音的问题。
'*                  IFELanguage接口是能够正确返回很多多音字拼音的,但多音字的读音只有特定词汇中
'*                  才能确认,因此在解析拼音时候不能把词拆成单字,否则多音字返回的拼音就很可能不对。
'*                  之前版本中就是因为把词拆开获取拼音导致多音字拼音错误。
'*                  这次的更新利用接口返回数据中标识每个拼音长度的数组实现了对返回拼音
'*                  的按字拆分,无需再把词拆成字获取单个字的拼音,从而解决了多音字问题。
'*                  需要说明的是,VB_MORRSLT结构就是MS文档中的MORRSLT结构,但是VBA自定义结构
'*                  无法实现不按4字节对齐,使得不得不修改MORRSLT的定义方式,能这样修改只能说运气不错,
'*                  因为被修改的部分刚好获取拼音用不到。
'*
'* Histroy:
'*                  2011-09-23
'*                  ● 重写主要代码,支持多音字,提高了运行效率。
'*                  ● 取拼音首字时,ao, ai, ei, ou, er作为首字而不是原来的第一个字母。
'*                  ● 为函数增加了注音方式选择,hàn可以显示为han或han4。
'*                  ● 函数的使用与之前版本兼容,将模块中函数代码和HZ2PY类代码覆盖之前版本即可实现升级,无需修改文档中的公式。
'*                  2011-04-07
'*                  ● 更正CoTaskMemFree传递参数错误,消除了Win7等环境下崩溃。
'*                  2007-04-03
'*                  ● 更正redim时vba数组默认起始值错误。
'*                  2007-04-02
'*                  ● 最初版本,实现了由汉字获取拼音。
'*
'***************************************************************************

汉字转拼音举例:重庆重要1234,澳门  
  
显示用空格分开的拼音  
公式: =HzToPy($b$14," ")
结果: hàn zì zhuǎn pīn yīn jǔ lì : chóng qìng zhòng yào 1 2 3 4 , ào mén
显示用-分开的拼音,同时不显示注音符号  
公式: =HzToPy($b$14,"-",false)
结果: han-zi-zhuan-pin-yin-ju-li-:-chong-qing-zhong-yao-1-2-3-4-,-ao-men
显示用空格分开的拼音,不显示注音符号,同时仅显示拼音的首字,并大写  
公式: =HzToPy($b$14, " ", false,true,false)
结果: H Z ZH P Y J L : CH Q ZH Y 1 2 3 4 , AO M
显示用空格分开的拼音,不显示注音符号,同时仅显示拼音的首字母,并大写  
公式: =HzToPy($b$14 ," ", false,true, true)
结果: H Z Z P Y J L : C Q Z Y 1 2 3 4 , A M

注,压缩包里的XLSM和XLS文件内容一样,方便各位按照自己office版本选择。
[12.11.29]版本
NewHztoPy_20110929.rar (55.73 KB, 下载次数: 7201)

HztoPy_20121129.rar

57.54 KB, 下载次数: 2943

评分

参与人数 10鲜花 +18 收起 理由
caxa2008 + 2
YZC51 + 2 优秀作品
wcymiss + 3 神人神作
老谭酸菜 + 2 优秀作品
mausser + 2 太强大了

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-30 10:50 | 显示全部楼层
本帖最后由 ttui 于 2011-9-24 13:05 编辑

<p><font color="red" size="6">最初版本,请不要使用了。</font></p><p>&nbsp;</p><p>服了服了,上传附件如此难</p><p> jihbhHMC.rar (20.65 KB, 下载次数: 3359)

TA的精华主题

TA的得分主题

发表于 2007-3-30 11:11 | 显示全部楼层

谢谢分享!

试验了一下,挺不错,不过多音字看样子还是很难实现啊


TA的精华主题

TA的得分主题

发表于 2007-3-30 11:14 | 显示全部楼层
本帖最后由 香川群子 于 2011-9-12 14:12 编辑

对汉字的调查结果如下:

韩汉字(韩国造字)            118    0.56%
日汉字(日本造字)            232    1.09%
汉汉字(中国冷僻字)       8949   42.10%
中日韩通用汉字           11958   56.25%
总计                          21257      


中日韩汉字注音及排序表.part1.rar (476.56 KB, 下载次数: 534)

评分

参与人数 1鲜花 +2 收起 理由
mspanwei + 2 感谢帮助

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-30 11:25 | 显示全部楼层
多义字没办法,word能做,hztopy也能做。word做不到,hztopy也做不到。
在Office 2007中,多义字可以正确转换,至少“怎么”可以正确转。
office2003就不行。

TA的精华主题

TA的得分主题

发表于 2007-3-30 11:53 | 显示全部楼层
hànzìzhuǎnpīnyīndewánměijiějuéfāngànhànzìzhuǎnpīnyīndewánměijiějuéfāngàn
zhìshǎoshìbǐjiàowánměi
jīngcèshìzàitōngguò
àosī

间接证明了中国人离不开汉字的说。

下面的拼音文字,如果有谁能够在一小时内搞懂,就是绝对高手了。

jiāngzhōngwénzìfúchuànzhuǎnhuànwéipīnyīnjiùzhèxiē
yǒuhànzìdédàopīnyīnqíshíbìngbúshìwǒhěnguānxīndeyīgèwèntízhǐshìfāxiànyǐjinggōngkāi
defāngfǎyǒuhěndàdequēxiàndànquèzuòdehěnhǎoyīncǐcáichángshìjiějuézhègèwèntí
guòchéngbǐwǒyùqīdeyàoqūzhédeduōzhǔyàoshìshízàishìyìzhǒnghěnshòuxiànzhìdeyǔyán
búguòhǎozàiyǒuhénántíyějǐnjǐnshìrúhézhǎodàoràoguòxiànzhìdetújìng
zhōngyúzàigèxiǎoshínèigǎodìngliǎoyíqiè
shíjiānbǐwǒyùjìdechánglehěnduōyīnwéiwǒshízàishìbùliǎojiěyěbùhěnshúxī
búguòhǎozàiyíqièdōujiějuélezhōngyúcóngxiǎobáichéngchángliǎoyìxiē
qíshíyěshìhěnqiángdàde

TA的精华主题

TA的得分主题

发表于 2007-3-30 12:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-30 14:28 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-30 15:03 | 显示全部楼层
QUOTE:
以下是引用stanleypan在2007-3-30 14:28:58的发言:

超强水平!

这话过了,
代码都不是新东西,只是中文资料非常之少。
幸好我会些论坛中一般人不熟悉的东西,能够分析调试其它程序,才最终得出现在的方法。

事实上要不是看了一个日本论坛上的贴子,我也无法很快完全掌握DispCallFunc的调用方法。
国外excel/vba高手有很多,还有很长的路要走啊~

TA的精华主题

TA的得分主题

发表于 2007-3-30 15:08 | 显示全部楼层
QUOTE:
以下是引用stanleypan在2007-3-30 14:28:58的发言:

超强水平!

像潘版主这样的API高手都说高,那一定高!

您需要登录后才可以回帖 登录 | 免费注册 新浪微博登陆

本版积分规则

关闭

最新热点上一条 /1 下一条

关注官方微信,每天坐享新鲜教程

手机版|Archiver|关于我们|联系我们|ExcelHome   

GMT+8, 2017-4-29 21:14 , Processed in 3.033059 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表