本来寻思着继续写点系统运行日志跟踪技术的,但早晨哥家领导从单位打来电话,让帮助她的闺蜜搞一个excel翻译的问题,总部IT搞不定。我过去是用excel做了几年工作,却都是些数学计算,跟翻译也扯不上啊;领导交代的任务,还是要认真对待,要不然下个月零花钱没着落!幸好,最后被哥顺利搞定,晚上领导很开心,话今天倍有面子,公司总部热烈谈论技术男的厉害。唉,哥用十多年时间来揣摩如何做嵌入式系统,没得到几个小红花;而每每耍些雕虫小技,却能迎来一堆粉丝,真不知是喜是悲了。拿出来分享下,或许能帮到更多人。

领导交代完不一会,收到具体问题和要求。看上去没什么,就纳闷几个IT是不是偷懒来着。下面是那个要做的工作的图:

Excel表里,产品名称是日文,韩文的,为了方便不懂外文的同事,要增加一列中文翻译。公式呢,她们从网络上找到了:
:=FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?&i="&A1&"&doctype=xml&version"),"//translation"),
但问题是,英文的蛮好,其它语言日文韩文等都不好使。哥的任务就是解决这个多语言问题。哥平常搞惯了嵌入式系统和后台程序,网络搞的确实不多,应该还能凑合应对。

直觉告诉我,需要在URL上加上语言选项。于是乎,先将这段http地址放到浏览器里,看看得到的xml是什么。

<response type="EN2ZH_CN" errorCode="0" elapsedTime="1">
<input>
<![CDATA[ " ]]>
</input>
<translation>
<![CDATA[ ” ]]>
</translation>
</response>

很显然,EN2ZH_CN就是那个翻译语言选项,我得先找到其它语言是怎么定义的,然后才能考虑如何提交这些额外参数。

打开有道的在线翻译,查看它的源码,找到了这些:

<ul id="customSelectOption">
<li class="on"><a val="AUTO" href="./在线翻译_有道_files/在线翻译_有道.html">自动检测语言</a></li>
<li><a val="ZH_CN2EN" href="./在线翻译_有道_files/在线翻译_有道.html">中文 » 英语</a></li>
<li><a val="ZH_CN2JA" href="./在线翻译_有道_files/在线翻译_有道.html">中文 » 日语</a></li>
<li><a val="ZH_CN2KR" href="./在线翻译_有道_files/在线翻译_有道.html">中文 » 韩语</a></li>
<li><a val="ZH_CN2FR" href="./在线翻译_有道_files/在线翻译_有道.html">中文 » 法语</a></li>
<li><a val="ZH_CN2RU" href="./在线翻译_有道_files/在线翻译_有道.html">中文 » 俄语</a></li>
<li><a val="ZH_CN2SP" href="./在线翻译_有道_files/在线翻译_有道.html">中文 » 西语</a></li>
<li><a val="EN2ZH_CN" href="./在线翻译_有道_files/在线翻译_有道.html">英语 » 中文</a></li>
<li><a val="JA2ZH_CN" href="./在线翻译_有道_files/在线翻译_有道.html">日语 » 中文</a></li>
<li><a val="KR2ZH_CN" href="./在线翻译_有道_files/在线翻译_有道.html">韩语 » 中文</a></li>
<li><a val="FR2ZH_CN" href="./在线翻译_有道_files/在线翻译_有道.html">法语 » 中文</a></li>
<li><a val="RU2ZH_CN" href="./在线翻译_有道_files/在线翻译_有道.html">俄语 » 中文</a></li>
<li><a val="SP2ZH_CN" href="./在线翻译_有道_files/在线翻译_有道.html">西语 » 中文</a></li>
</ul>

就是这些,不费功夫,日文转中文就是JA2ZH_CN嘛!开始往URL里添加这个额外参数。哥也不知道他们是怎么定义的,只能猜猜猜。这个过程挺无聊的,先对着那个在线翻译,找可能的定义方式,试了好久也没成功。最后,看着那个返回xml结果,突然想,他们不会是把请求和结果定义成一个样子吧?

果然,就是返回结果里的type字段。不过还是没法高兴。日文,韩文,法文全都没反应。哥开始怀疑,是不是type字段也不是我想象的语言控制字段。

继续做实验,于是有了下面两个url访问:

http://fanyi.youdao.com/translate?&type=EN2ZH_CN&i="who?谁"&doctype=xml&version
运行结果:

<response type="EN2ZH_CN" errorCode="0" elapsedTime="7">
<input>
<![CDATA[ "who?谁" ]]>
</input>
<translation>
<![CDATA[ “谁?谁” ]]>
</translation>
</response>

http://fanyi.youdao.com/translate?&type=ZH_CN2EN&i="who?谁"&doctype=xml&version

运行结果:

<response type="ZH_CN2EN" errorCode="0" elapsedTime="6">
<input>
<![CDATA[ "who?谁" ]]>
</input>
<translation>
<![CDATA[ "Who the who?" ]]>
</translation>
</response>

得,哥被人耍了,有道这个页面压根就没给提供中英之外的选择;哥需要另外找翻译服务。首先想到的是百度,查了一下,baidu提供翻译的API,接口还蛮简单的;当然,也查了下youdao,他们也有API。对比之后发现,两家差不多,只是语法上略微差别。于是乎,让她们申请ID先。很简单,免费的,几分钟后就给我发来了账户信息。

继续开工,做出了下面这个URL(neverland是网上找到的账户,人家介绍怎么用有道API,哥借用下。同学们记得谢谢neverland的奉献,要用的多,自己申请哈):
http://fanyi.youdao.com/openapi.do?keyfrom=neverland&key=969918857&type=data&doctype=xml&version=1.1&q=キラキラリボンカチューシャ
***注意咯,q后面的待翻译文本,不能用引号,否则不翻译。***
得到翻译结果:


<youdao-fanyi>

<errorCode>0</errorCode>
<query>
<![CDATA[ キラキラリボンカチューシャ ]]>
</query>
<!-- 有道翻译 -->
<translation>
<paragraph>
<![CDATA[ 闪闪发光的丝带发箍 ]]>
</paragraph>
</translation>

</youdao-fanyi>

万事俱备,开始修改excel的公式,如下:

=_xlfn.FILTERXML(_xlfn.WEBSERVICE("http://fanyi.youdao.com/openapi.do?keyfrom=neverland&key=969918857&type=data&doctype=xml&version=1.1&q="&F3&""),"//paragraph")

咦,咋还是不好使?英文的可以了,其它的全都不行!嗯,应该是编码问题。URL是必须ascii八位元的,除了英文,其它文字都是unicode或是其它宽字符编码的,需要转换下格式。查了下帮助,URLENCODE函数可以帮助解决,如下:
=_xlfn.ENCODEURL(F3)

再修改翻译公式,得到:
=_xlfn.FILTERXML(_xlfn.WEBSERVICE("http://fanyi.youdao.com/openapi.do?keyfrom=yamaxun&key=1400504075&type=data&doctype=xml&version=1.1&q="&H3&""),"//paragraph")
注意咯,这里编码和翻译没法合并,具体原因自己思考!

OK,传改完的excel过去,打完收工。剩下的就是excel的拖动复制工作,不用哥多嘴罗嗦。

Excel里内嵌在线翻译的更多相关文章

  1. [Tool] 透过PowerPoint Online在部落格文章里内嵌简报

    [Tool] 透过PowerPoint Online在部落格文章里内嵌简报 前言 讲课的时候,用PowerPoint做简报,好像已经成了讲课的惯例.而在课后,将课堂简报整理成部落格的文章,如果单纯是在 ...

  2. 原生js实现tab选项卡里内嵌图片滚动特效代码

    <!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8&quo ...

  3. python 里内嵌函数是可以修改外部环境里的变量的

    python 里内嵌函数是可以修改外部环境里的变量的 关键是细节. 如果是简单变量类型, 那么不可以. 但是如果是容器类变量, 则没问题了. 代码如下: class G: pass def f(): ...

  4. Win64 驱动内核编程-24.64位驱动里内嵌汇编

    64位驱动里内嵌汇编 讲道理64位驱动是不能直接内链汇编的,遇到这种问题,可以考虑直接把机器码拷贝到内存里,然后直接执行. 获得机器码的方式,可以写好代码之后,直接通过vs看反汇编,然后根据地址在看内 ...

  5. Andriod使用webview控件往APP里内嵌网页

    转自博文:http://www.cnblogs.com/JuneZhang/p/4148542.html 1.布局文件片段:res-layout <WebView android:id=&quo ...

  6. tkinter内嵌Matplotlib系列(一)之解读官网教材

    目录 目录 前言 (一)小目标 1.首页卷面: 2.绘制一条函数曲线: 3.绘制多条曲线: (二)官方教材 1.对GUI框架的支持: 2.内嵌于tkinter的说明文档: (三)对官方教程的解读 目录 ...

  7. Java实现内嵌浏览器

    创建项目 ---->   导入需要的jar ---->  代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...

  8. PluginOK中间件高级版-支持在Chrome、Edge、Firefox等浏览器网页中真正内嵌ActiveX等控件运行的版本已获多家上市公司采购

    PluginOK(牛插)中间件(原名:本网通WebRunLocal)是一个实现WEB浏览器(Web Browser)与本地程序(Local Application)之间进行双向调用的低成本.强兼容.安 ...

  9. 魔改——MFC SDI 支持 内嵌 EXCEL OLE

    ==================================声明================================== 本文版权归作者所有 未经作者授权 请勿转载 保留法律追究的 ...

随机推荐

  1. jquery里面的名称冲突解决方法

    jQuery 使用 $ 符号作为 jQuery 的简介方式. 某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号. jQuery 使用名为 noConflict( ...

  2. 笔记007:对象——RegExp正则表达式对象

    1.RegExp 一个用于匹配的模式文本 用0个或多个修饰符描述的匹配模式细节 RegExp对象的创建形式 用内建构造器创建    var re = new RegExp("j.*t&quo ...

  3. AFNetworking图片缓存问题

    AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...

  4. 驱动开发学习笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

    驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentatio ...

  5. 【BZOJ2874】训练士兵(主席树)

    题意:有一个N*M的矩阵,给出一些形如(x1,y1,x2,y2,s)的操作,代表(x1,y1)到(x2,y2)都被加上了s这个数 现在有一些强制在线的询问,询问(x1,y1)到(x2,y2)的和 对于 ...

  6. PLSQL win7 64位

    1. 解压instantclient-basic-win32-11.2.0.1.0.zip至Oracle安装目录的Product下 具体目录如下D:\Oracle\product\instantcli ...

  7. Spring——(一)IoC

    1. 什么是IOC IOC:inversion of Control 控制反转. 控制反转:即控制权由应用程序代码转到了外部容器.(反转:就是控制权的转移).--降低业务对象之间的依赖程度,即实现了解 ...

  8. Linux系统中配置jdk

    在Linux系统下安装jdk 1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...

  9. python 循环嵌套

    需求如下: 1. #定义商品列表类 # def shangpin_list(): # for i in com_list: # print(com_list.index(i),end=" & ...

  10. Monkeyrunner小脚本关于camera的使用

    一下代码涉及自动执行camera,属性一个小设置,恢复初始值,并在中间添加截屏功能 将两个截屏进行前后对比,并返回值 适合初学者,刚刚了解monkeyrunner 的人员来看 注意:一下脚本如果不能执 ...