原本尋思着繼續寫點系統運行日誌跟蹤技術的,但早晨哥家領導從單位打來電話,讓幫助她的閨蜜搞一個excel翻譯的問題,總部IT搞不定。我過去是用excel作了幾年工做,卻都是些數學計算,跟翻譯也扯不上啊;領導交代的任務,仍是要認真對待,要否則下個月零花錢沒着落!幸虧,最後被哥順利搞定,晚上領導很開心,話今天倍有面子,公司總部熱烈談論技術男的厲害。唉,哥用十多年時間來揣摩如何作嵌入式系統,沒獲得幾個小紅花;而往往耍些雕蟲小技,卻能迎來一堆粉絲,真不知是喜是悲了。拿出來分享下,或許能幫到更多人。html
領導交代完不一會,收到具體問題和要求。看上去沒什麼,就納悶幾個IT是否是偷懶來着。下面是那個要作的工做的圖:api
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結果,忽然想,他們不會是把請求和結果定義成一個樣子吧?url
果真,就是返回結果裏的type字段。不過仍是無法高興。日文,韓文,法文全都沒反應。哥開始懷疑,是否是type字段也不是我想象的語言控制字段。spa
繼續作實驗,因而有了下面兩個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後面的待翻譯文本,不能用引號,不然不翻譯。***
獲得翻譯結果:
萬事俱備,開始修改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的拖動複製工做,不用哥多嘴羅嗦。