在 Excel 裡用 ChatGPT 翻譯圖片上的文字

閱讀時間約 14 分鐘
你應該已經聽說了 OpenAI ChatGPT 是如何如何強大,如何如何創造奇跡。。。我就不再畫蛇添足多加描述了。我們不如來讓它來為我們做點正經事(而不是把它當成玩具)。最近我有個朋友和我說了以下的問題:
  1. 他需要手動把圖片裡的文字一個一個寫出來(在電腦上)
  2. 他需要翻譯這些文字
其實。。。以上我們可以用一種方法,一石二鳥,一次性解決以上的問題。我的方案是,在 Excel 上用 OpenAI ChatGPT 來解決。 OpenAI ChatGPT.
1. 首先,你得先建立一個 Excel 文件,儲存為 .xlsm 文件格式,也就是可以用 Macro 的格式。
2. 在菜單裡,點擊 Developer 選項,然後選擇 Visual Basic。如果你沒辦法找到 Developer 選項,看這裡
3. 在 Visual Basic 的視窗裡,點擊 Tools,然後 References,得注意主要加入 “Microsoft XML, v6.0” 庫。
4. 在主要菜單裡選擇 Insert,然後是 Module。
5. 這時候,你會看見 Module 1 出現在 Project 的對話框。點擊它,把以下的代碼粘貼到編輯器裡。記得把你的 OpenAPI 的密鑰也寫進去。看不明白?別擔心。。。這裡本來就是低代碼,我們為你准備就是。
Option Explicit
Private p&, token, dic


Function TranslateCell(cellContent As Range, targetLanguage As String) As String
Dim httpRequest As Object
Dim apiKey As String
Dim apiUrl As String
Dim postData As String
Dim response As String
Dim jsonResponse As Object
Dim translatedText As String

' Replace with your OpenAI API key
apiKey = "YOUR-OPEN-API-KEY"

' Set the API URL for ChatGPT 3.5
apiUrl = "https://api.openai.com/v1/chat/completions"

' Prepare the POST data
postData = "{""model"": ""gpt-3.5-turbo"", ""messages"": [{""role"": ""system"", ""content"": ""You are an expert translator""}, {""role"": ""user"", ""content"": ""Translate this word into " & targetLanguage & ", answer only: " & cellContent.Text & """}], ""temperature"":0.7, ""max_tokens"":1000, ""top_p"":1, ""frequency_penalty"":0, ""presence_penalty"":0}"

' Clean up escape caharacters
postData = Replace(postData, "'", "")

' Create an HTTP request object
Set httpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")

' Configure the HTTP request
With httpRequest
.Open "POST", apiUrl, False
.SetRequestHeader "Content-Type", "application/json"
.SetRequestHeader "Authorization", "Bearer " & apiKey
.Send postData
End With

' Get the HTTP response
response = httpRequest.ResponseText

' Parse the JSON response
Set jsonResponse = ParseJSON(response)

' Get the translated text
translatedText = jsonResponse("obj.choices(0).message.content")

' Return the translated text
TranslateCell = translatedText
End Function


Function ParseJSON(json$, Optional key$ = "obj") As Object
p = 1
token = Tokenize(json)
Set dic = CreateObject("Scripting.Dictionary")
If token(p) = "{" Then ParseObj key Else ParseArr key
Set ParseJSON = dic
End Function
Function ParseObj(key$)
Do: p = p + 1
Select Case token(p)
Case "]"
Case "[": ParseArr key
Case "{"
If token(p + 1) = "}" Then
p = p + 1
dic.Add key, "null"
Else
ParseObj key
End If

Case "}": key = ReducePath(key): Exit Do
Case ":": key = key & "." & token(p - 1)
Case ",": key = ReducePath(key)
Case Else: If token(p + 1) <> ":" Then dic.Add key, token(p)
End Select
Loop
End Function
Function ParseArr(key$)
Dim e&
Do: p = p + 1
Select Case token(p)
Case "}"
Case "{": ParseObj key & ArrayID(e)
Case "[": ParseArr key
Case "]": Exit Do
Case ":": key = key & ArrayID(e)
Case ",": e = e + 1
Case Else: dic.Add key & ArrayID(e), token(p)
End Select
Loop
End Function
'-------------------------------------------------------------------
' Support Functions
'-------------------------------------------------------------------
Function Tokenize(s$)
Const Pattern = """(([^""\\]|\\.)*)""|[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?|\w+|[^\s""']+?"
Tokenize = RExtract(s, Pattern, True)
End Function
Function RExtract(s$, Pattern, Optional bGroup1Bias As Boolean, Optional bGlobal As Boolean = True)
Dim c&, m, n, v
With CreateObject("vbscript.regexp")
.Global = bGlobal
.MultiLine = False
.IgnoreCase = True
.Pattern = Pattern
If .TEST(s) Then
Set m = .Execute(s)
ReDim v(1 To m.Count)
For Each n In m
c = c + 1
v(c) = n.Value
If bGroup1Bias Then If Len(n.submatches(0)) Or n.Value = """""" Then v(c) = n.submatches(0)
Next
End If
End With
RExtract = v
End Function
Function ArrayID$(e)
ArrayID = "(" & e & ")"
End Function
Function ReducePath$(key$)
If InStr(key, ".") Then ReducePath = Left(key, InStrRev(key, ".") - 1) Else ReducePath = key
End Function
Function ListPaths(dic)
Dim s$, v
For Each v In dic
s = s & v & " --> " & dic(v) & vbLf
Next
Debug.Print s
End Function
Function GetFilteredValues(dic, match)
Dim c&, i&, v, w
v = dic.keys
ReDim w(1 To dic.Count)
For i = 0 To UBound(v)
If v(i) Like match Then
c = c + 1
w(c) = dic(v(i))
End If
Next
ReDim Preserve w(1 To c)
GetFilteredValues = w
End Function
Function GetFilteredTable(dic, cols)
Dim c&, i&, j&, v, w, z
v = dic.keys
z = GetFilteredValues(dic, cols(0))
ReDim w(1 To UBound(z), 1 To UBound(cols) + 1)
For j = 1 To UBound(cols) + 1
z = GetFilteredValues(dic, cols(j - 1))
For i = 1 To UBound(z)
w(i, j) = z(i)
Next
Next
GetFilteredTable = w
End Function
Function OpenTextFile$(f)
With CreateObject("ADODB.Stream")
.Charset = "utf-8"
.Open
.LoadFromFile f
OpenTextFile = .ReadText
End With
End Function
6. 好了,你基本上已經完成,現在可以復制你要翻譯的圖片。
7. 回到你主要的 Excel 文件,在菜單裡,選擇 Data,點擊 From Picture 選項,然後再選擇是否來自文件還是粘貼版。有時候你會見到服務器繁忙的錯誤訊息,等一會再嘗試就是。
8. 這時候,你應該看到文字已經從圖片解析出來。選擇那些你要翻譯的文字,然後用以下的方程式
=TranslateCell ([你要翻譯的 EXCEL CELL], "[你需要的語言]")
9. 你可以翻譯成任何語言,只要用同一個方程式就是。
VBA 自身其實並不支持 JSON 解讀。JSON 解讀其實有好幾種方法,我們這裡選用的是源自 Daniel Ferry 的方法。
留言0
查看全部
發表第一個留言支持創作者!
我熱愛電影,尤其是那些充滿科幻元素、展示人工智能的影片。由於人工智能的熱度猶如跑步機上的機器人一樣迅速攀升,我精選了一些具有引人入勝的人工智能概念的電影,讓你不禁懷疑這些電影是否很快就會成為我們的現實。那麼,准備好爆米花,一起深入了解吧! 魔鬼終結者(1984)/ 魔鬼終結者 2 (1991) 魔鬼
探究低代码/无代码迷思的幽默一面,我们一起来纠正错误观念,揭开隐藏的真相,并为有效使用这些工具提供一些见解。
這裡我們呈現如何在五分鐘內用 Contact Form 7 搞定網頁表格
正在尋找 SeaTable / Airtable 以外的選擇?NocoDB 也許是個不錯的自行安裝的選擇,還是一項開源項目。
我熱愛電影,尤其是那些充滿科幻元素、展示人工智能的影片。由於人工智能的熱度猶如跑步機上的機器人一樣迅速攀升,我精選了一些具有引人入勝的人工智能概念的電影,讓你不禁懷疑這些電影是否很快就會成為我們的現實。那麼,准備好爆米花,一起深入了解吧! 魔鬼終結者(1984)/ 魔鬼終結者 2 (1991) 魔鬼
探究低代码/无代码迷思的幽默一面,我们一起来纠正错误观念,揭开隐藏的真相,并为有效使用这些工具提供一些见解。
這裡我們呈現如何在五分鐘內用 Contact Form 7 搞定網頁表格
正在尋找 SeaTable / Airtable 以外的選擇?NocoDB 也許是個不錯的自行安裝的選擇,還是一項開源項目。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在Excel中實作使用者介面(UI)是一個有趣且實用的技能,能夠幫助你更好地呈現資料、提供功能並增強使用者體驗。本文將逐步介紹如何在Excel中建立基本的UI元素,例如按鈕、下拉式選單和文字框,並擴展功能,例如資料驗證和動態更新。
Thumbnail
Excel是一個強大的電子試算表軟體,不僅適用於數據分析和報表製作,還能通過VBA(Visual Basic for Applications)進行自動化和擴展功能。要使用這些進階功能,首先需要啟用開發人員選項。以下將詳細介紹在Windows和Mac版本的Excel中如何啟用這個選項。 在Wi
Thumbnail
進度條在日常生活和工作中非常常見,它們可以直觀地顯示任務或項目的完成情況。在 Excel 中,我們可以使用一些技巧和函數來製作出美觀且功能強大的進度條。本篇教學將介紹如何使用 Excel 的 REPT 函數和條件格式設定,來製作一個簡單而有效的進度條。
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
在 Excel 中,VLOOKUP 函數是一個強大的工具,它可以幫助你快速找到並擷取特定值對應的相關資訊。這篇教學將向你展示如何使用 VLOOKUP 函數來搜索數據,並提供一個實際的範例。
Thumbnail
上一篇介紹方格子的數據統計資料,右下角有一個CSV統計表格可以下載,另存新檔後可以供方格子作者另外編輯利用。前一篇請看相關說明! ※EXCEL插入圖表的實際案例※ 1.找到插入圖表後,可以先看看自己適合的種類,多玩幾種才能比出差異,找到合適的呢! 2.excel很貼心的在每一個表格的下方都備註圖表的
Thumbnail
【方格子最新好物-下載“CSV”(EXCEL插入”建議圖表”的使用實例之一】 最近發現方格子主編很盡心地在作者自己的資料欄裡編寫文章的數據統計資料,因此,每天我都會研究一下自己的進展,個人覺得很是有趣。有了這個系統資訊之後,我才赫然發現只要默默經營網站,並持續創作不放棄,還是有許多可以學習成長的地方
因為我有一個有超過30個工作表的Excel檔,直接在畫面下方捲動選取實在太慢了,所以就找了製作目錄的方法,只要點擊目錄的連結,就會自動取消隱藏該工作表並移動過去,回到目錄後又會自動隱藏目標工作表,用起來還不錯,詳細方法已經寫在裡面了。
Thumbnail
相較於其他行業,自由譯者的工作收入比較不透明。畢竟不同資歷和背景的單價差很多,不了解內情的人往往會對譯者提出的單價有意見。我想這也是為什麼很多譯者不願意公開自己收入的原因。我今天想要從日本譯者的狀況切入,分析一下譯者的收入狀況。
Thumbnail
在淡豹所寫的《在棚戶區》裡扼要地給了北京胡同兩種概念:一個是之於流行文化下,承擔變遷中近乎暴力似所消逝的某種歷史象徵; 另一種是在商業化的推瀾裡,在胡同打造成擁有時髦的咖啡廳、私房菜餐廳與小店,然後成為流行雜誌裡的復古女郎。 胡同裡的尋常人家 從我們熟悉的大都、北平至北京,「衚衕」到胡同,次次更迭
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在Excel中實作使用者介面(UI)是一個有趣且實用的技能,能夠幫助你更好地呈現資料、提供功能並增強使用者體驗。本文將逐步介紹如何在Excel中建立基本的UI元素,例如按鈕、下拉式選單和文字框,並擴展功能,例如資料驗證和動態更新。
Thumbnail
Excel是一個強大的電子試算表軟體,不僅適用於數據分析和報表製作,還能通過VBA(Visual Basic for Applications)進行自動化和擴展功能。要使用這些進階功能,首先需要啟用開發人員選項。以下將詳細介紹在Windows和Mac版本的Excel中如何啟用這個選項。 在Wi
Thumbnail
進度條在日常生活和工作中非常常見,它們可以直觀地顯示任務或項目的完成情況。在 Excel 中,我們可以使用一些技巧和函數來製作出美觀且功能強大的進度條。本篇教學將介紹如何使用 Excel 的 REPT 函數和條件格式設定,來製作一個簡單而有效的進度條。
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
在 Excel 中,VLOOKUP 函數是一個強大的工具,它可以幫助你快速找到並擷取特定值對應的相關資訊。這篇教學將向你展示如何使用 VLOOKUP 函數來搜索數據,並提供一個實際的範例。
Thumbnail
上一篇介紹方格子的數據統計資料,右下角有一個CSV統計表格可以下載,另存新檔後可以供方格子作者另外編輯利用。前一篇請看相關說明! ※EXCEL插入圖表的實際案例※ 1.找到插入圖表後,可以先看看自己適合的種類,多玩幾種才能比出差異,找到合適的呢! 2.excel很貼心的在每一個表格的下方都備註圖表的
Thumbnail
【方格子最新好物-下載“CSV”(EXCEL插入”建議圖表”的使用實例之一】 最近發現方格子主編很盡心地在作者自己的資料欄裡編寫文章的數據統計資料,因此,每天我都會研究一下自己的進展,個人覺得很是有趣。有了這個系統資訊之後,我才赫然發現只要默默經營網站,並持續創作不放棄,還是有許多可以學習成長的地方
因為我有一個有超過30個工作表的Excel檔,直接在畫面下方捲動選取實在太慢了,所以就找了製作目錄的方法,只要點擊目錄的連結,就會自動取消隱藏該工作表並移動過去,回到目錄後又會自動隱藏目標工作表,用起來還不錯,詳細方法已經寫在裡面了。
Thumbnail
相較於其他行業,自由譯者的工作收入比較不透明。畢竟不同資歷和背景的單價差很多,不了解內情的人往往會對譯者提出的單價有意見。我想這也是為什麼很多譯者不願意公開自己收入的原因。我今天想要從日本譯者的狀況切入,分析一下譯者的收入狀況。
Thumbnail
在淡豹所寫的《在棚戶區》裡扼要地給了北京胡同兩種概念:一個是之於流行文化下,承擔變遷中近乎暴力似所消逝的某種歷史象徵; 另一種是在商業化的推瀾裡,在胡同打造成擁有時髦的咖啡廳、私房菜餐廳與小店,然後成為流行雜誌裡的復古女郎。 胡同裡的尋常人家 從我們熟悉的大都、北平至北京,「衚衕」到胡同,次次更迭