You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需API密钥与多语言包,Excel VBA如何检测文本外语语种?

基于VBA的无依赖语种检测方案

以下是几个无需API密钥、无需额外安装语言包的VBA解决方案:

1. 调用Google Translate匿名检测接口

通过构造Google Translate的内部检测请求,可直接获取语种代码,无需API密钥。该方案需联网,适合短文本检测:

Function DetectLanguage_Google(text As String) As String
    Dim xmlHttp As Object
    Dim response As String
    Dim jsonArr As Variant
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    ' 构造检测请求,dt=ld表示仅返回语种检测结果
    xmlHttp.Open "GET", "https://translate.googleapis.com/translate_a/single?client=gtx&dt=ld&q=" & URLEncode(text), False
    xmlHttp.Send
    
    response = xmlHttp.responseText
    ' 解析JSON数组(返回格式为[[["<语种代码>"]]])
    jsonArr = Split(Split(response, "[[["")(1), """]]]")(0)
    DetectLanguage_Google = jsonArr
    
    Set xmlHttp = Nothing
End Function

' 辅助函数:URL编码
Function URLEncode(text As String) As String
    URLEncode = WorksheetFunction.EncodeURL(text)
End Function

2. 利用Windows系统MLang组件(离线检测)

Windows自带的MLang多语言支持库可本地检测语种,无需联网和额外安装:

Function DetectLanguage_MLang(text As String) As String
    Dim mlang As Object
    Dim langId As Long
    Dim langCode As String
    
    Set mlang = CreateObject("MLanguage.MultiLanguage.2")
    ' 检测语种ID
    mlang.DetectString 0, text, Len(text), langId
    ' 将语种ID转换为ISO代码
    mlang.GetRfc1766Info langId, langCode
    
    DetectLanguage_MLang = Left(langCode, 2) '提取两位语种代码(如en、zh)
    Set mlang = Nothing
End Function

注意:该组件对部分小语种的检测准确率可能略低于在线接口,但胜在完全离线。

3. 调用Bing Translate匿名检测接口

通过构造Bing的翻译请求,解析返回结果中的语种信息:

Function DetectLanguage_Bing(text As String) As String
    Dim xmlHttp As Object
    Dim response As String
    Dim jsonStart As Integer
    Dim jsonEnd As Integer
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    xmlHttp.Open "POST", "https://www.bing.com/ttranslatev3?isVertical=1&IG=ABC123&IID=translator.5036.1", False
    xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    ' 构造请求体
    xmlHttp.Send "text=" & URLEncode(text) & "&from=&to=en"
    
    response = xmlHttp.responseText
    ' 解析JSON中的detectedLanguage
    jsonStart = InStr(response, """detectedLanguage"":{""language"":""") + 31
    jsonEnd = InStr(jsonStart, response, """")
    DetectLanguage_Bing = Mid(response, jsonStart, jsonEnd - jsonStart)
    
    Set xmlHttp = Nothing
End Function

注意:Bing的接口参数可能会不定期调整,若失效需检查请求参数格式。

内容的提问来源于stack exchange,提问作者Derek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:35:15