在word中通过VBA调用百度翻译API在线翻译
lipiwang 2025-05-24 15:22 3 浏览 0 评论
一天的时间,借助各种AI终于解决了这个问题:在word中通过VBA调用百度翻译API进行在线翻译。给我的word又添加了一项神技。
先上代码:
Sub 宏5()
'
' 宏5 宏
Dim appid As String
Dim key As String
Dim salt As String
Dim sign As String
Dim query As String
Dim fromLang As String
Dim toLang As String
Dim url As String
Dim http As Object
Dim responseText As String
Dim translatedText As String
' 设置API信息
appid = "20240903002139***" ' 您的APPID
key = "BKbLnNjh8Xc_Bps7I***" ' 您的密钥
salt = "1435660288" ' 固定随机数以简化测试
query = Selection.text
fromLang = "en"
toLang = "zh"
' 构建待加密字符串
Dim toEncrypt As String
toEncrypt = appid & query & salt & key
Debug.Print "待加密字符串: " & toEncrypt
' 使用UAPI进行MD5加密
Set http = CreateObject("MSXML2.XMLHTTP")
url = "https://uapis.cn/api/textmd5?text=" & URLEncode(toEncrypt)
http.Open "GET", url, False
http.send
Debug.Print "MD5加密请求已发送"
If http.Status = 200 Then
responseText = http.responseText
Debug.Print "MD5加密API响应: " & responseText
End If
' 清理可能的空格和换行符(可选,取决于响应的确切格式)
responseText = Replace(responseText, vbCrLf, "")
responseText = Replace(responseText, " ", "")
' 查找"text"字段的值
Dim startPos As Long
Dim endPos As Long
startPos = InStr(1, responseText, """text"":""", vbTextCompare)
If startPos > 0 Then
startPos = startPos + Len("""text"":""")
endPos = InStr(startPos, responseText, """", vbTextCompare)
If endPos > startPos Then
sign = Mid(responseText, startPos, endPos - startPos)
Debug.Print "生成的MD5签名: """ & sign & """"
Else
Debug.Print "提取MD5签名时出错:无法找到有效的结束位置"
sign = "错误的签名"
End If
Else
Debug.Print "提取MD5签名时出错:无法找到'text'字段"
sign = "错误的签名"
End If
' 构建请求URL
url = "https://fanyi-api.baidu.com/api/trans/vip/translate?q=" & URLEncode(query) & _
"&from=" & fromLang & "&to=" & toLang & "&appid=" & appid & _
"&salt=" & salt & "&sign=" & sign
Debug.Print "翻译请求URL: " & url
' 发送百度翻译API请求
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", url, False
http.send
Debug.Print "翻译请求已发送"
If http.Status = 200 Then
responseText = http.responseText
Debug.Print "翻译API响应: " & responseText
' 提取翻译结果
startPos = InStr(1, responseText, """dst"":""", vbTextCompare)
If startPos > 0 Then
startPos = startPos + Len("""dst"":""")
endPos = InStr(startPos, responseText, """", vbTextCompare)
If endPos > startPos Then
translatedText = Mid(responseText, startPos, endPos - startPos)
' 转换 Unicode 转义字符到实际中文字符
translatedText = DecodeUnicode(translatedText)
' 将翻译结果插入到选定文本的后面
Selection.Collapse Direction:=wdCollapseEnd
Selection.TypeText text:=" " & translatedText
Debug.Print "翻译结果: " & translatedText
End If
Else
MsgBox "无法找到翻译结果。"
End If
Else
MsgBox "翻译API请求失败,HTTP状态码:" & http.Status
End If
' 释放对象
Set http = Nothing
End Sub
' URL 编码函数
Function URLEncode(ByVal text As String) As String
Dim i As Integer
Dim result As String
Dim c As String
result = ""
For i = 1 To Len(text)
c = Mid(text, i, 1)
Select Case asc(c)
Case 48 To 57, 65 To 90, 97 To 122
result = result & c
Case Else
result = result & "%" & Right("0" & Hex(asc(c)), 2)
End Select
Next i
URLEncode = result
End Function
' 将 \uXXXX 形式的 Unicode 转义序列转换为实际字符
Function DecodeUnicode(text As String) As String
Dim i As Long
Dim result As String
Dim unicodeChar As String
i = 1
Do While i <= Len(text)
If Mid(text, i, 2) = "\u" Then
' 读取 Unicode 代码
unicodeChar = Mid(text, i + 2, 4)
' 转换为字符并添加到结果
result = result & ChrW("&H" & unicodeChar)
' 跳过 \uXXXX
i = i + 6
Else
' 非 Unicode 转义字符,直接添加
result = result & Mid(text, i, 1)
i = i + 1
End If
Loop
DecodeUnicode = result
End Function
上述代码成功的解决了在word中调用百度翻译API进行在线翻译的问题。虽然代码可能不是那么健壮,但是目前测试下来还是可以使用的。
这个代码是提出需求后让AI给编写的。
首先在百度翻译平台申请了账号,获得了APPID和密钥。然后成功的利用UAPI提供的接口解决了字符串MD5加密的问题。最后进行了百度翻译响应的转化,最后得到了期望的结果。
这个代码基本上是AI给编写的。但是在编写过程中,发现,AI会陷入一种死循环,开始的时候,我使用的是ChatGPT-4o,在解决字符串的MD5加密过程中,第一次陷入了死循环,开始他希望调用系统自带的一些功能,但是我的系统有问题,不行,于是他就改为自己用VBA编写程序计算字符串的MD5哈希值,结果还是不行,然后,就开始在这两两种方式之间进行了来回的切换。后来我想到了利用网上提供的在线功能,找到了一个计算MD5的API接口。然后,在提取API给出的密码时,又出现了死循环,先是希望调用VBA-JSON库,结果不行,然后开始手动解析JSON代码,还是不行。最后,开始换别的AI进行实验,先是换了通义,结果和ChatGPT一样,再换Kimi,也是一样。最后换了文心一言,终于走出了思维误区。
通过这个过程,也发现,不同的AI在解决问题的时候还是容易陷入思维误区里面出不来的。这时候,人一定要有想法,否则,就很难解决问题了。
#VBA##chatGTP人工智能##百度翻译##API##MD5#
#word中调用VBA#
- 上一篇:API 安全之认证鉴权
- 下一篇:使用JWT生成token
相关推荐
- httpclient+jsoup实现小说线上采集阅读
-
前言 用过老版本UC看小说的同学都知道,当年版权问题比较松懈,我们可以再UC搜索不同来源的小说,并且阅读,那么它是怎么做的呢?下面让我们自己实现一个小说线上采集阅读。(说明:仅用于技术学习、研究) ...
- Python3+requests+unittest接口自动化测试实战
-
一、Requests介绍RequestsisanelegantandsimpleHTTPlibraryforPython,builtforhumanbeings.翻译过来就是...
- 授权码 + PKCE 模式|OIDC & OAuth2.0 认证协议最佳实践系列【03】
-
在上一篇文章中,我们介绍了OIDC授权码模式,本次我们将重点围绕授权码+PKCE模式(AuthorizationCodeWithPKCE)进行介绍,从而让你的系统快速具备接入用户认...
- JWT 在 Java Web 开发中的奇妙应用
-
JWT在JavaWeb开发中的奇妙应用在当今的互联网世界里,安全始终是一个绕不开的话题。而当我们谈论到Web应用的安全性时,认证和授权绝对是其中的核心部分。说到这,我忍不住要给大家讲个笑话...
- 动手操作:一个 OAuth 2 应用程序(2) - 配置 Keycloak 为授权服务器
-
接上一篇《动手操作:一个OAuth2应用程序(1)-应用程序场景》进行场景分析后,本篇就开始动手实现授权服务器。在本文中,我们将Keycloak配置为系统的授权服务器(图3)。...
- JSON Web Token是什么?
-
JSONWebToken(缩写JWT)是目前最流行的跨域认证解决方案。传统的session认证http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证...
- Keycloak Servlet Filter Adapter使用
-
KeycloakClientAdapters简介Keycloakclientadaptersarelibrariesthatmakeitveryeasytosecurea...
- 使用JWT生成token
-
一、使用JWT进行身份验证1、传统用户身份验证Internet服务无法与用户身份验证分开。一般过程如下:用户向服务器发送用户名和密码。验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中...
- 在word中通过VBA调用百度翻译API在线翻译
-
一天的时间,借助各种AI终于解决了这个问题:在word中通过VBA调用百度翻译API进行在线翻译。给我的word又添加了一项神技。先上代码:Sub宏5()''宏5宏Dimapp...
- API 安全之认证鉴权
-
作者:半天前言API作为企业的重要数字资源,在给企业带来巨大便利的同时也带来了新的安全问题,一旦被攻击可能导致数据泄漏重大安全问题,从而给企业的业务发展带来极大的安全风险。正是在这样的背景下,Ope...
- 用WordPress建站哪些插件会拖慢速度影响排名?
-
你是否发现网站加载总慢半拍,SEO排名死活上不去?八成是插件惹的祸!80%的站长不知道,WordPress插件用错类型或配置不当,分分钟让网站速度暴跌,爬虫抓取效率直接砍半。缓存插件没装对,越用越卡你...
- JavaScript报错了?不要慌!怎么看怎么处理都在这里
-
在开发中,有时,我们花了几个小时写的JS代码,在游览器调试一看,控制台一堆红,瞬间一万头草泥马奔腾而来。至此,本文主要记录JS常见的一些报错类型,以及常见的报错信息,分析其报错原因,并给予处理...
-
- 跨站脚本攻击(四)
-
04XSS漏洞挖掘技巧4.1常见的绕过姿势实际应用中web程序往往会通过一些过滤规则来阻止带有恶意代码的用户输入被显示,但由于HTML语言的松散性和各种标签的不同优先级,使得我们绕过过滤规则成为了可能。4.1.1利用大小写绕过HTML标签...
-
2025-05-24 15:21 lipiwang
- WAF-Bypass之SQL注入绕过思路总结
-
过WAF(针对云WAF)寻找真实IP(源站)绕过如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经...
- Springboot之登录模块探索(含Token,验证码,网络安全等知识)
-
简介登录模块很简单,前端发送账号密码的表单,后端接收验证后即可~淦!可是我想多了,于是有了以下几个问题(里面还包含网络安全问题):1.登录时的验证码2.自动登录的实现3.怎么维护前后端登录状态在这和大...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)