在 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
查看全部
發表第一個留言支持創作者!
你可能也想看
在Excel中實作使用者介面(UI)教學在Excel中實作使用者介面(UI)是一個有趣且實用的技能,能夠幫助你更好地呈現資料、提供功能並增強使用者體驗。本文將逐步介紹如何在Excel中建立基本的UI元素,例如按鈕、下拉式選單和文字框,並擴展功能,例如資料驗證和動態更新。
Thumbnail
avatar
Pochi
2024-05-18
在Excel中啟用開發人員選項的完整指南Excel是一個強大的電子試算表軟體,不僅適用於數據分析和報表製作,還能通過VBA(Visual Basic for Applications)進行自動化和擴展功能。要使用這些進階功能,首先需要啟用開發人員選項。以下將詳細介紹在Windows和Mac版本的Excel中如何啟用這個選項。 在Wi
Thumbnail
avatar
Pochi
2024-05-17
在 Excel 中使用 REPT 函數製作進度條進度條在日常生活和工作中非常常見,它們可以直觀地顯示任務或項目的完成情況。在 Excel 中,我們可以使用一些技巧和函數來製作出美觀且功能強大的進度條。本篇教學將介紹如何使用 Excel 的 REPT 函數和條件格式設定,來製作一個簡單而有效的進度條。
Thumbnail
avatar
Pochi
2024-04-12
【Python】Python在ETL處理的事先準備 - CSV、Excel、SQLite和SQLAlchemyETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
avatar
W. C. Chen
2024-03-25
在 Excel 中使用 VLOOKUP 函數進行數據搜索在 Excel 中,VLOOKUP 函數是一個強大的工具,它可以幫助你快速找到並擷取特定值對應的相關資訊。這篇教學將向你展示如何使用 VLOOKUP 函數來搜索數據,並提供一個實際的範例。
Thumbnail
avatar
Pochi
2024-02-19
方格子最新好物-下載“CSV”(EXCEL插入”建議圖表”的使用實例!)--2/2上一篇介紹方格子的數據統計資料,右下角有一個CSV統計表格可以下載,另存新檔後可以供方格子作者另外編輯利用。前一篇請看相關說明! ※EXCEL插入圖表的實際案例※ 1.找到插入圖表後,可以先看看自己適合的種類,多玩幾種才能比出差異,找到合適的呢! 2.excel很貼心的在每一個表格的下方都備註圖表的
Thumbnail
avatar
Ds Tacr
2023-04-20
方格子最新好物-下載“CSV”(EXCEL插入”建議圖表”的使用實例!)--1/2【方格子最新好物-下載“CSV”(EXCEL插入”建議圖表”的使用實例之一】 最近發現方格子主編很盡心地在作者自己的資料欄裡編寫文章的數據統計資料,因此,每天我都會研究一下自己的進展,個人覺得很是有趣。有了這個系統資訊之後,我才赫然發現只要默默經營網站,並持續創作不放棄,還是有許多可以學習成長的地方
Thumbnail
avatar
Ds Tacr
2023-02-09
在Excel製作好用的「目錄」工作表因為我有一個有超過30個工作表的Excel檔,直接在畫面下方捲動選取實在太慢了,所以就找了製作目錄的方法,只要點擊目錄的連結,就會自動取消隱藏該工作表並移動過去,回到目錄後又會自動隱藏目標工作表,用起來還不錯,詳細方法已經寫在裡面了。
avatar
園長
2022-04-25
在辭職之前,你了解自由譯者的收入嗎?(上)相較於其他行業,自由譯者的工作收入比較不透明。畢竟不同資歷和背景的單價差很多,不了解內情的人往往會對譯者提出的單價有意見。我想這也是為什麼很多譯者不願意公開自己收入的原因。我今天想要從日本譯者的狀況切入,分析一下譯者的收入狀況。
Thumbnail
avatar
小譯者的日常
2020-11-06
在高德地圖上起舞的北京胡同在淡豹所寫的《在棚戶區》裡扼要地給了北京胡同兩種概念:一個是之於流行文化下,承擔變遷中近乎暴力似所消逝的某種歷史象徵; 另一種是在商業化的推瀾裡,在胡同打造成擁有時髦的咖啡廳、私房菜餐廳與小店,然後成為流行雜誌裡的復古女郎。 胡同裡的尋常人家 從我們熟悉的大都、北平至北京,「衚衕」到胡同,次次更迭
Thumbnail
avatar
唯一
2019-11-01