EXCEL VBA调用百度API翻译

EXCEL VBA调用百度API翻译

Public Function translateZh_En(ByVal str As String) As String'调用百度翻译API,将指定内容由中文翻译为英文Dim par As StringDim data() As Stringpar = generateReqStr(str, "zh", "en")data() = translateJson(getHttp(par)) '调用API,获取API 返回, '调用JSON转换函数,解析API返回的结果'    Debug.Print data(0)
'    Debug.Print data(1)
'    Debug.Print data(2)
'    Debug.Print data(3)
'    Debug.Print data(4)
'    Debug.Print data(5)translateZh_En = UCase(data(3)) '获取API返回的翻译结果End FunctionPublic Function translateZh_En_Batch(ByRef arr() As String) As String()'调用百度翻译API,将指定内容由中文翻译为英文Dim par As StringDim data() As StringDim returnData() As StringDim resp As Stringpar = generateReqStrBatch(arr, "zh", "en")resp = getHttp(par)  '调用API,获取API 返回data() = translateJsonBatch(resp) '调用JSON转换函数,解析API返回的结果ReDim returnData(UBound(data) - 4) As StringFor i = 0 To UBound(data) - 4returnData(i) = UCase(Split(data(i), "|", -1, vbTextCompare)(1))NexttranslateZh_En_Batch = returnData() '获取API返回的翻译结果End FunctionPublic Function translateEn_Zh(ByVal str As String) As String'调用百度翻译API,将指定内容由英文翻译为中文Dim par As StringDim data() As Stringpar = generateReqStr(str, "en", "zh")data() = translateJson(getHttp(par)) '调用API,获取API 返回, '调用JSON转换函数,解析API返回的结果translateEn_Zh = data(3)End FunctionPublic Function translateEn_Zh_Batch(ByRef arr() As String) As String()'调用百度翻译API,将指定内容由英文翻译为中文Dim par As StringDim data() As StringDim returnData() As StringDim resp As Stringpar = generateReqStrBatch(arr, "en", "zh")resp = getHttp(par)  '调用API,获取API 返回data() = translateJsonBatch(resp) '调用JSON转换函数,解析API返回的结果ReDim returnData(UBound(data) - 4) As StringFor i = 0 To UBound(data) - 4returnData(i) = Split(data(i), "|", -1, vbTextCompare)(1)NexttranslateZh_En_Batch = returnData() '获取API返回的翻译结果End FunctionPublic Function getHttpOld(str As String) As String
'调用API
Dim HttpReq As Object
Dim url As String
Set HttpReq = CreateObject("Microsoft.XMLHTTP") '创建XMLHTTP对象
url = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=iOMhRqTKNByhC80V9SbcQIpo&" & str
With HttpReq.Open "GET", url, False.setRequestHeader "content-type", "application/x-www-form-urlencoded".SEND'Debug.Print .responsetext
End With
'发送HTTL  Get请求, 百度API只允许GET,不允许POSTgetHttp = HttpReq.responsetextEnd FunctionPublic Function getHttp(str As String) As String
'调用API(new)
Dim HttpReq As Object
Dim url As String
Set HttpReq = CreateObject("Microsoft.XMLHTTP") '创建XMLHTTP对象
url = "http://api.fanyi.baidu.com/api/trans/vip/translate?" & str
'Debug.Print (url)
With HttpReq.Open "GET", url, False.setRequestHeader "content-type", "application/x-www-form-urlencoded".SEND'Debug.Print .responsetext
End With
'发送HTTL  Get请求, 百度API只允许GET,不允许POSTgetHttp = HttpReq.responsetextEnd FunctionPublic Function generateReqStr(q As String, from_Str As String, to_Str As String) As String
'生成Request 字符串Dim appid As StringDim key As StringDim salt As IntegerDim sign As StringDim par As StringMath.Randomize (Timer)salt = (Rnd * 1000000) Mod 20000key = "修改为你自己申请的API的Key"appid = "修改为你自己申请的API的appid"'Debug.Print (appid + q + CStr(salt) + key)sign = MD5_32(appid + q + CStr(salt) + key)  '转换为MD5'Debug.Print (sign)par = "q=" + encode(q) + "&from=" + from_Str + "&to=" + to_Str + "&appid=" + appid + "&salt=" + CStr(salt) + "&sign=" + sign  '调用urlencode 方法,将待翻译内容转换为urlencode,generateReqStr = parEnd FunctionPublic Function generateReqStrBatch(q() As String, from_Str As String, to_Str As String) As String
'生成Request 字符串Dim appid As StringDim key As StringDim salt As IntegerDim sign As StringDim par As StringDim str1 As String'Dim ln As String'ln = ChrB(10) & ChrB(0)Math.Randomize (Timer)salt = (Rnd * 1000000) Mod 20000key = "修改为你自己申请的API的Key"appid = "修改为你自己申请的API的appid"For i = LBound(q) To UBound(q)str1 = str1 & q(i) & vbLfNext'Debug.Print (appid + str1 + CStr(salt) + key)sign = MD5_32(appid + str1 + CStr(salt) + key)  '转换为MD5'Debug.Print (sign)par = "q=" + encode(str1) + "&from=" + from_Str + "&to=" + to_Str + "&appid=" + appid + "&salt=" + CStr(salt) + "&sign=" + sign '调用urlencode 方法,将待翻译内容转换为urlencode,generateReqStrBatch = parEnd FunctionPublic Function translateJson(str As String) As String()
'调用JScript 解析JSON
Dim js As Object
Dim objJSON As Object
Dim objJSON2 As Object
Dim strFunc As String
Dim returnData(6) As String'创建Script对象
Set js = CreateObject("ScriptControl"): js.Language = "JScript"
'aa = "{""from"":""en"",""to"":""zh"",""trans_result"":[{""src"":""today"",""dst"":""\u4eca\u5929""}]}"
'获取第一层的数据内容的JavaScript函数代码
strFunc = "function getjson(s) { return eval('(' + s + ')'); }"
'获取第二层的数据内容JavaScript函数代码
strFunc2 = "function j(s) { return eval('(' + s + ').trans_result[0]'); }"
'将JavaScript函数代码加入到Script对象。
js.AddCode strFunc
js.AddCode strFunc2
Set objJSON = js.CodeObject.getjson(str) '执行函数方法 ,这是一种执行方法
On Error GoTo ErrorHandler1
Set objJSON2 = js.Run("j", str)   '执行函数方法 ,这是另一种执行方法'获取第一层的结果
'Debug.Print objJSON.from
'Debug.Print objJSON.to
'Debug.Print objJSON.trans_resultreturnData(0) = objJSON.from
'returnData(1) = objJSON.To'获取第二层的结果
'Debug.Print CallByName(objJSON2, "src", VbGet)  '这是另一种获取属性的方法
'Debug.Print objJSON2.dstreturnData(2) = objJSON2.src
returnData(3) = objJSON2.dst'如果API执行结果不正确,获取API的不正确的返回信息。
On Error GoTo ErrorHandler
returnData(4) = objJSON.error_code
returnData(5) = objJSON.error_msgtranslateJson = returnData
Exit FunctionErrorHandler:
returnData(4) = ""
returnData(5) = ""
translateJson = returnData
Exit FunctionErrorHandler1:
returnData(0) = ""
returnData(1) = ""
returnData(2) = ""
returnData(3) = ""
returnData(4) = objJSON.error_code
returnData(5) = objJSON.error_msg
translateJson = returnData
Exit FunctionEnd FunctionPublic Function translateJsonBatch(str As String) As String()
'调用JScript 解析JSON
Dim js As Object
Dim objJSON As Object
Dim objJSON2 As Object
Dim count As String
Dim count_i As Integer
Dim strFunc As String
Dim returnData(6) As String
Dim returnData2() As String'创建Script对象
Set js = CreateObject("ScriptControl"): js.Language = "JScript"
'aa = "{""from"":""en"",""to"":""zh"",""trans_result"":[{""src"":""today"",""dst"":""\u4eca\u5929""}]}"
'获取第一层的数据内容的JavaScript函数代码
strFunc = "function getjson(s) { return eval('(' + s + ')'); }"
'获取第二层的数据个数JavaScript函数代码
strFunc1 = "function getjsonCount(s) { return eval('(' + s + ').trans_result.length'); }"
'获取第二层的数据内容JavaScript函数代码
strFunc2 = "function getjsonLevel(s,i) { return eval('(' + s + ').trans_result['+i+']'); }"
'将JavaScript函数代码加入到Script对象。
js.AddCode strFunc
js.AddCode strFunc1
js.AddCode strFunc2
On Error GoTo ErrorHandler2
Set objJSON = js.CodeObject.getjson(str) '执行函数方法 ,这是一种执行方法On Error GoTo ErrorHandler1
count = js.CodeObject.getjsonCount(str) '获取数据个数
returnData(0) = objJSON.from
'returnData(1) = objJSON.To
count_i = Val(count)
If (count > 0) ThenReDim returnData2(count + 3) As String'Set objJSON2 = js.Run("j", str)   '执行函数方法 ,这是另一种执行方法returnData2(UBound(returnData2) - 3) = returnData(0)
returnData2(UBound(returnData2) - 2) = returnData(1)For i = 0 To count - 1  '获取返回的数组内容Set objJSON2 = js.CodeObject.getjsonLevel(str, i)returnData(2) = objJSON2.srcreturnData(3) = objJSON2.dstreturnData2(i) = returnData(2) & "|" & returnData(3)NextElseReDim returnData2(4) As String  '无数据返回,则数据区域返回空returnData2(0) = " | "
End If
'如果API执行结果不正确,获取API的不正确的返回信息。
On Error GoTo ErrorHandler
'returnData(4) = objJSON.error_code
'returnData(5) = objJSON.error_msg
returnData2(UBound(returnData2) - 1) = returnData(4)
returnData2(UBound(returnData2)) = returnData(5)
translateJsonBatch = returnData2Exit FunctionErrorHandler:
'获取错误信息失败,则设置错误信息为空
returnData(4) = ""
returnData(5) = ""
returnData2(UBound(returnData2) - 1) = returnData(4)
returnData2(UBound(returnData2)) = returnData(5)
translateJsonBatch = returnData2
Exit FunctionErrorHandler1: '获取第一层数据失败,则返回错误信息
returnData(0) = ""
returnData(1) = ""
returnData(2) = ""
returnData(3) = ""
returnData(4) = objJSON.error_code
returnData(5) = objJSON.error_msg
ReDim returnData2(4) As String  '无数据返回,则数据区域返回空
returnData2(UBound(returnData2) - 3) = returnData(0)
returnData2(UBound(returnData2) - 2) = returnData(1)
returnData2(UBound(returnData2) - 1) = returnData(4)
returnData2(UBound(returnData2)) = returnData(5)
returnData2(0) = " | "translateJsonBatch = returnData2
Exit FunctionErrorHandler2: '获取第一层数据失败,则返回错误信息ReDim returnData2(4) As String  '无数据返回,则数据区域返回空returnData2(0) = " | "translateJsonBatch = returnData2
Exit FunctionEnd FunctionPublic Function encode(ByVal str As String) As String
'调用JavaScript的encodeURIComponent方法进行urlencode 编码Dim js As ObjectDim strFun As StringDim data As StringSet js = CreateObject("ScriptControl"): js.Language = "JScript"'aa = "{""from"":""en"",""to"":""zh"",""trans_result"":[{""src"":""today"",""dst"":""\u4eca\u5929""}]}"strFunc = "function getjson(s) { return eval('encodeURIComponent(\""'+s+'\"")'); }"js.AddCode strFuncstr = Replace(str, vbCrLf, "\r\n")  '转换回车换行符为URL回车换行符str = Replace(str, vbLf, "\n")   '转换换行符为URL换行符data = js.CodeObject.getjson(str)'Debug.Print dataencode = data
End FunctionSub testTranslate()Debug.Print translateZh_En("感觉身体被掏空")Dim testData() As StringReDim testData(5)testData(0) = "苹果"testData(1) = "香蕉"testData(2) = "不作就不会死"testData(3) = "红色"testData(4) = "绿色"testData(5) = "黄色"Dim returnData() As StringreturnData = translateZh_En_Batch(testData)For i = 0 To UBound(returnData)Debug.Print returnData(i)Next
End Sub
Public Function FY(ByVal 语句 As String, Optional 源语言 As String = "zh", Optional 目标语言 As String = "en") As StringDim par As StringDim data() As Stringpar = generateReqStr(语句, LCase(源语言), LCase(目标语言))data() = translateJson(getHttp(par))FY = LCase(data(3))
End Function

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式与文本三剑客

目录 一、正则表达式 1. 定义 2. 字符匹配 3. 重复限定符 4. 位置锚点 5. 分组和引用 6. 扩展正则表达式 二、文本三剑客 1. grep 1.1 定义 1.2 语法 1.3 选项 1.4 示例 2. sed 2.1 定义 2.2 通式 2.3 选项 2.4 脚本格式(脚本语法) 2.…

【Unity3D小功能】Unity3D中Text使用超链接并绑定点击事件

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中遇到了要给Text加超链接的需求,研究了实现…

什么样的评论更容易得到别人的关注

要发表吸引人的评论,可以注意这些个方面: 合适的软件:用DT浏览器的笔记本写文本,保存为图片,用图片的方式评论更容易得到别人的关注。 特别的观点:发表与众不同的观点,或者从不同的角度看待问…

USACO 1月比赛 铜组题解

比赛链接:http://usaco.org/ 第一题:MAJORITY OPINION 标签:思维、模拟题意:给定一个长度为 n n n的序列 a a a,操作:若区间 [ i , j ] [i,j] [i,j]内某个数字 k k k出现的次数 大于区间长度的一半&#…

已解决解决java.util.concurrent.BrokenBarrierException异常的正确解决方法,亲测有效!!!

已解决解决java.util.concurrent.BrokenBarrierException异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 总结 在并发编程中,CyclicBarrier是Java提供的一个同步辅助工具类&#xff…

WiFi基础知识介绍(超详细)

1.WiFi专业名词概念 AP(Access Point):无线接入点:这个概念特别广,在这里,用大白话说,你可以把CC3200当做一个无线路由器,这个路由器的特点不能插入网线,没有接入Internet,只能等待其他设备的链…

C语言中的数组操作技巧:提升程序的效率和可读性

1. 概念 数组是C语言中常见且重要的数据结构,在许多应用中都被广泛使用。合理地处理数组操作可以提高程序的效率和可读性。本文将介绍C语言中常用的数组操作方法和技巧,帮助读者优化数组操作并提升程序效果。 2.常用的数组操作方法 2.1 数组的初始化 C…

canvas自定义扩展方法:文字自动换行

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

hyperf 二十四 模型缓存

教程:Hyperf 一 安装及配置 1.1 安装 目前仅支持redis。 composer require hyperf/model-cache 1.2 配置 配置位置:config/autoload/databases.php 配置类型默认值备注handlerstringHyperf\ModelCache\Handler\RedisHandler::class无cache_keystri…

python时间格式数据处理。

由于编码和格式问题,有时候从read_csv或者read_excel读取到的时间类型是不确定的。 1.字符串转datetime.datetime时间格式 如果是字符串string类型,则可以使用: df[PDATE] pd.to_datetime(df[PDATE]).dt.date 转换为date格式&#xff0c…

开发安全之:Header Manipulation

Overview 方法 echo_json() 包含未验证的数据, 这会招致各种形式的攻击,包括:cache-poisoning、cross-site scripting、cross-user defacement、page hijacking、cookie manipulation 或 open redirect。 Details 以下情况中会出现 Header …

Websocket基本用法

1.Websocket介绍 WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 应用场景: 视频弹幕网页聊天体育实况更新股票基金…

基于OpenCV的高压电力检测项目案例

一、项目背景与目标 随着高压电力设施的日益增多,传统的巡检方式已无法满足现代电力系统的需求。为此,我们决定利用计算机视觉技术,特别是OpenCV库,开发一个高压电力检测系统。目标是实现自动化、高精度的电力设备检测&#xff0c…

P1228 地毯填补问题(葬送的芙蓉王【bushi】)

地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿。宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的所有地…

【零基础学习CAPL】——CAN报文的发送(配合Panel面板单次发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建2.1.新建一个Panel2.2. 在Panel中调出控件窗口2.3.控件添加与配置3.系统变量创建4.系统变量与Panel绑定5.CAPL脚本实现6.效果1.概述 使用场景,按下面板按钮同时发送报文。 本章主要介绍 CAPL脚…

Redis -- String 字符串, 计数命令,字符串操作

"学如逆水行舟,不进则退。" 目录 Redis的String字符串 常见命令 set get mget mset setnx setex psetex 计数命令 incr incrby decr decrby incrbyfloat 字符串操作 append getrange setrange strlen 小结 string内部编码 Redis…

文生图提示词:自然景观

场景描述 --自然景观 Natural Landscapes 涵盖了多种自然景观,可以用于精确地表达 AI 生成图像中所需的自然环境。 Mountain 山脉 River 河流 Forest 森林 Beach 海滩 Ocean 海洋 Lake 湖泊 Waterfall 瀑布 Desert 沙漠 Valley 山谷 Meadow 草地 Glacier 冰川 Cliff…

分布式系统唯一ID方案

分布式系统唯一ID方案 一、引言 在当今数字化时代,分布式系统的发展势不可挡,从云服务到微服务架构,都凸显了分布式系统在构建大规模、高效的应用中的重要性。而在这个庞大而复杂的系统中,唯一ID的生成和管理变得至关重要。唯一…

springboot137欢迪迈手机商城设计与开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

通过与chatGPT交流实现零样本事件抽取

1、写作动机: 近来的大规模语言模型(例如Chat GPT)在零样本设置下取得了很好的表现,这启发作者探索基于提示的方法来解决零样本IE任务。 2、主要贡献: 提出了基于chatgpt的多阶段的信息抽取方法:在第一阶…