你让你的 Excel 学口译了么?

最近 Apple ID 被盗,上传了资料在等官解

这天无聊开着 Excel 在那乱点…

Web 函数…这是什么鬼 (,,• ₃ •,,)?

赶紧地看下函数说明

ENCODEURL(text): 返回 URL 编码的字符串。
WEBSERVICE(url): 返回 Web 服务中的数据。
FILTERXML(xml, xpath): 使用指定的 XPath 从 XML 内容返回特定数据。

厉害了我的哥!(o ° ω ° O)


当即我就脑补出了用 Excel 网抓的流程:

=FILTERXML(WEBSERVICE(ENCODEURL(urlText)),XPathText)

简直完美!(╭ ̄ 3  ̄)╭♡


……

Wait!

……

好像哪里不太对!?

……

X…M…L…?

如果你能找到在线XML文档…

正常网站都是用 HTML 的吧!! OTL

然后

  • 对于不支持的协议,例如 ftp:// file:// ,WEBSERVICE 返回错误值 #VALUE!
  • 如果 url 字符串所含字符超过 GET 请求允许的 2048 个字符 ,则 WEBSERVICE 返回错误值 #VALUE!
  • 如果参数导致字符串无效或含有的字符超过允许的单元格限制( 32767 个字符 ),则 WEBSERVICE 返回错误值 #VALUE!

—— Microsoft Office 帮助

??? 【黑人问号脸.gif】我默默地看了下自己知乎主页的源码…

(っ °Д °;)っ︵┻━┻

这年头网上已经没有只用 GET 请求 字符总数在 32767 个字符一下的 XML 文档了吧!!!


不信我搜给你看!

……

你别说,还真有! (⊙ . <#(@=

……

dict.youdao.com/search?

不知道哪位大神分享的有道词典的XML版

……

简直完美!(╭ ̄ 3  ̄)╭♡


既然搞到了有道老师的 XML 文档,为什么不调教调教 Excel 学口译呢?!

如果你会一丢丢 XPath

初级口译:问一个答一个

不会?…就只能速成了!

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集

那啥叫节点呢?看图说话

看到一个个书名号没有?看到红框框没有?剩下的请去 W3School 自学!

音标 //phonetic-symbol 和翻译 //translation/content 的 XPath 套一下刚才YY的公式:

=FILTERXML(WEBSERVICE("http://dict.youdao.com/search?q="&[InputText]&"&doctype=xml"),XPathText[音标])

再试试中文?

厉害了我的哥!(o ° ω ° O)

不过貌似解决不了一词多义?

如果你会一丢丢数组

中级口译:问一个答一溜

研究一下中译英的 XML 文件…发现打不开…

没关系,还记得那个没被想起来的 EncodeURL 么…转化好以后是这样的…

dict.youdao.com/search?

果然有5个翻译,却只显示了一个…

想到 XPath 取得是节点集,那么…用数组形式再转置一下

多义是解决了,不过其他问题惨不忍睹啊…特别有道词典貌似没收录我的哥…无解了吧

不信我搜给你看!

……

你别说,还真有! (⊙ . < # (@=

……

fanyi.youdao.com/transl

不知道哪位大神分享的有道翻译的XML版…

……

简直完美!(╭ ̄ 3  ̄)╭♡

如果你碰巧找到了另一份在线XML文档

高级口译:问啥答啥

不过有道翻译没音标,所以能用词典还是要用词典的

  • 第一个 IFERROR 处理有道词典没收录的换有道翻译
  • 第二个 IFERROR 处理 #N/A
  • 条件格式处理重复值

厉害了我的哥!(o ° ω ° O)

'音标
=IFERROR(FILTERXML(WEBSERVICE("http://dict.youdao.com/search?q="&$B3&"&doctype=xml"),XPathText_D[音标]),"--")
'翻译 数组形式 Ctrl + Shift + Enter
=IFERROR(IFERROR(TRANSPOSE(FILTERXML(WEBSERVICE("http://dict.youdao.com/search?q="&B3&"&doctype=xml"),XPathText_D[词典])),TRANSPOSE(FILTERXML(WEBSERVICE("http://fanyi.youdao.com/translate?i="&B3&"&doctype=xml"),XPathText_D[翻译]))),"")

本来到这里应该结束了,但是今天是个特殊的日子!

如果你会一丢丢VBA

我已经把所有的全忘记了!

写个自定义函数 <删除>装逼</删除>

Option Explicit
Function UDF_Translate(strText As String) As String
    'Version1.0 by 饼干
    Dim urlDict As String, urlTranslate As String, xmlText As String
    Dim PhoneticSymbol As String, TranslateArr
    '整理url
    urlDict = "http://dict.youdao.com/search?q=" & strText & "&doctype=xml"
    urlTranslate = "http://fanyi.youdao.com/translate?i=" & strText & "&doctype=xml"
    '使用 WebService 和 FilterXML 获取网络数据
    On Error GoTo Error01
    xmlText = Application.WorksheetFunction.WebService(urlDict)
    'Debug.Print xmlText    '调试用
    PhoneticSymbol = Application.WorksheetFunction.FilterXML(xmlText, "//phonetic-symbol")
    TranslateArr = Application.WorksheetFunction.FilterXML(xmlText, "//translation/content[1]")
    '整理数据
    If IsArray(TranslateArr) Then
        UDF_Translate = "[" & PhoneticSymbol & "] " & Join(Application.WorksheetFunction.Transpose(TranslateArr), ";")
        UDF_Translate = "[" & PhoneticSymbol & "] " & TranslateArr
    End If
    'Debug.Print Translate  '调试用
Exit Function
Error01:    '若有道词典报错
    On Error GoTo Error02
    xmlText = Application.WorksheetFunction.WebService(urlTranslate)
    'Debug.Print xmlText    '调试用
    UDF_Translate = Application.WorksheetFunction.FilterXML(xmlText, "//translation")