你让你的 Excel 学口译了么?


最近 Apple ID 被盗,上传了资料在等官解
这天无聊开着 Excel 在那乱点…
赶紧地看下函数说明
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
文档了吧!!!
不信我搜给你看!
……
你别说,还真有! (⊙ . <#(@=
……
http:// dict.youdao.com/search? q=cookie&doctype=xml
不知道哪位大神分享的有道词典的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[音标])
再试试中文?
不过貌似解决不了一词多义?
如果你会一丢丢数组
中级口译:问一个答一溜
研究一下中译英的 XML 文件…发现打不开…
没关系,还记得那个没被想起来的 EncodeURL 么…转化好以后是这样的…
http:// dict.youdao.com/search? q=%E9%A5%BC%E5%B9%B2&doctype=xml
想到 XPath 取得是节点集,那么…用数组形式再转置一下
不信我搜给你看!
……
你别说,还真有! (⊙ . < # (@=
……
http:// fanyi.youdao.com/transl ate?i=cookie&doctype=xml
不知道哪位大神分享的有道翻译的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")