1. 引言
今天,我們來聊聊一個跟簡報相關的實用案例。
如果你像我一樣:
英文不夠好,但有時候必須用英文做簡報,
那大概也會像我一樣:
把簡報的英文逐字稿都先準備好。
但如果你真的像我一樣,
連英文逐字稿都不知道怎麼寫,
那很可能就只能跟我一樣,
先寫中文的稿子再用翻譯工具翻成英文。
今天這篇文章就要教你如何利用 GenAI 和 Google Apps Script 自動翻譯 Google Slides 備忘稿。
2. 案例背景 (Case Background)
我在準備簡報的時候,
會幫每一頁的切換時機都想好一個轉場銜接的台詞。
所以我的每一段逐字稿都會有很精準對應的投影片頁數,
該在哪裡講,就在哪裡講。
因此我寫逐字稿的時候,
不會把整個簡報的內容寫在一處,
而是會分散寫在各頁投影片下方。
但是當我把每一頁的稿子各自寫好後,
也就沒辦法整個複製拿去翻譯。
而是要一頁一頁地複製、一段一段地貼上,
非常麻煩。
3. 解決方案:如何使用 GenAI 產生自動翻譯程式碼
我們可以這樣發問:
我有一份 Google Slides,id 是 “1WRGTbfwKocOGiDU04MTr8I5fJOL_mdwqoyJ7XS19fSk”
請幫我撰寫一段 Google Apps Script 程式碼,將每一張投影片的備忘稿內容翻譯成英文,並將翻譯結果附加在原本的備忘稿內容後方。
補充說明:
這裡說的 id,指的是你的 Google Slides 的 id,可以從 URL 上找到這個資訊。
例如當 URL 是 https://docs.google.com/presentation/d/1WRGTbfwKocOGiDU04MTr8I5fJOL_mdwqoyJ7XS19fSk/edit#slide=id.p
id 就是中間最長最雜亂的這一段:1WRGTbfwKocOGiDU04MTr8I5fJOL_mdwqoyJ7XS19fSk
或是你也可以先問 ChatGPT:「請問我要怎麼查看我的 Google Slides 的 Id?」
當 ChatGPT 幫我們寫好程式,
我們就拿去執行試試看。
結果執行失敗,遇到 error:Exception: Invalid argument: source
不用擔心,這是人之常情。
就算是資深工程師也常遇到 error。
我們只要把這個 error 回饋給 ChatGPT,
他就會再修正一下程式了。
果然,兩三次來回問答後,
我們就得到了一段改良後的可執行程式碼:
function translateSpeakerNotesToEnglish() {
var presentationId = '1WRGTbfwKocOGiDU04MTr8I5fJOL_mdwqoyJ7XS19fSk';
var presentation = SlidesApp.openById(presentationId);
var slides = presentation.getSlides();
slides.forEach(function(slide) {
var speakerNotes = slide.getNotesPage().getSpeakerNotesShape();
if (speakerNotes && speakerNotes.getText()) {
var originalText = speakerNotes.getText().asString();
// 檢查是否有非空的內容
if (originalText.trim() !== '') {
Logger.log(originalText);
try {
// 使用 LanguageApp 翻譯成英文
var translatedText = LanguageApp.translate(originalText, 'zh', 'en');
var updatedText = originalText + '\n\n(Translated to English:)\n' + translatedText;
// 更新備忘稿內容
speakerNotes.getText().setText(updatedText);
} catch (e) {
Logger.log('Translation error for slide: ' + slide.getObjectId() + ', Error: ' + e.message);
}
} else {
Logger.log('No speaker notes found for slide: ' + slide.getObjectId());
}
}
});
Logger.log('Translation process completed.');
}
4. Google Apps Script 解說
這段程式碼的工作流程:
- 開啟 Google Slides 文件並獲取所有投影片。
- 對每一張投影片檢查是否有備忘稿內容。
- 如果有內容,將內容從中文翻譯成英文,並將翻譯結果附加在原有內容後。
- 如果過程中發生錯誤,會記錄錯誤但不會中斷流程。
- 最終所有投影片處理完成後,會記錄一條訊息表示翻譯工作結束。
這段程式碼確保能夠順利處理有備忘稿的投影片,同時避免翻譯失敗或無效翻譯的問題。
有興趣的人可以看一下以下程式碼的細節說明,
沒興趣就可以快速略過,不影響我們的自動化目標。
function translateSpeakerNotesToEnglish()
這是整個函數的起點,這個函數會被執行來處理翻譯工作。var presentationId = '1WRGTbfwKocOGiDU04MTr8I5fJOL_mdwqoyJ7XS19fSk';
這一行定義了 Google Slides 文件的 ID。這個 ID 代表的是一個特定的 Google Slides 文件。此處已經將您提供的 Slides ID 填入。var presentation = SlidesApp.openById(presentationId);
這一行使用SlidesApp.openById()
函數打開指定的 Google Slides 文件。這樣就能夠訪問這個文件中的投影片。var slides = presentation.getSlides();
這行程式碼會獲取該簡報中的所有投影片,並將它們存儲在slides
陣列中。slides.forEach(function(slide) { ... });
這裡使用forEach()
方法遍歷每一張投影片 (slide
)。接下來的操作會對每一張投影片依次進行處理。var speakerNotes = slide.getNotesPage().getSpeakerNotesShape();
每張投影片都有一個備忘稿區域(Speaker Notes)。這一行程式碼會獲取備忘稿的形狀對象(speakerNotes
)。如果備忘稿存在,接下來的程式碼將進一步處理它。if (speakerNotes && speakerNotes.getText()) {
這一行進行了一個條件檢查,確保備忘稿對象存在並且有文字內容。這樣可以避免嘗試翻譯不存在的備忘稿。var originalText = speakerNotes.getText().asString().trim();
這一行將備忘稿的文字內容提取出來,並使用trim()
移除前後的空白字元,存儲到originalText
變數中。if (originalText !== '') {
這裡再次檢查備忘稿內容是否為空。空內容不需要翻譯,所以如果有內容,程式碼會進入下一步。var translatedText = LanguageApp.translate(originalText, 'zh', 'en');
這一行使用LanguageApp.translate()
函數將備忘稿從中文翻譯成英文。此處指定來源語言為'zh'
(中文),目標語言為'en'
(英文)。如果備忘稿是其他語言,可以更改'zh'
為對應的語言代碼。if (translatedText && translatedText !== originalText) {
這行程式碼確保翻譯結果存在且與原始文本不同。如果翻譯的結果與原始文本相同,這可能表示翻譯失敗或者不需要翻譯,因此會跳過附加翻譯的步驟。var updatedText = originalText + '\n\n(Translated to English:)\n' + translatedText;
這行將原始文本和翻譯結果組合起來,翻譯的英文內容會附加在原備忘稿後面,並加上(Translated to English:)
以標示這是翻譯內容。speakerNotes.getText().setText(updatedText);
這行將更新後的備忘稿內容設置回投影片的備忘稿區域,替換掉原有的文字內容。} catch (e) { Logger.log('Translation error for slide: ' + slide.getObjectId() + ', Error: ' + e.message); }
try-catch
用來捕捉翻譯過程中的任何錯誤,並記錄錯誤訊息。如果翻譯過程中出現問題,不會中斷整個程式,而是會跳過有問題的投影片並繼續處理下一張投影片。Logger.log('No speaker notes found for slide: ' + slide.getObjectId());
如果投影片中沒有備忘稿內容,會記錄一條訊息,指出哪一張投影片沒有備忘稿。Logger.log('Translation process completed.');
當所有投影片的備忘稿翻譯完成後,記錄一條訊息,標示翻譯過程已完成。
5. 測試與結果 (Testing and Results)
執行程式前的投影片長這樣:
執行程式後的投影片長這樣:
而且不只這一頁,是整份簡報的每一頁都自動翻譯完了。
6. 進階提示
針對備忘稿的處理,
我自己還做了一個功能是:把所有備忘稿集結到最後一頁,
串成一篇完整的文章。
用意是我想要整篇拿去請 ChatGPT 讀給我聽,
幫助我準備英文簡報。
我不想要一段一段分開貼給 ChatGPT,
想要快速地整份貼上,請他整份一起讀完。
關於我怎麼利用 ChatGPT 協助我準備英文簡報,
可以參考這篇文章
7. 結論
這個案例展示了如何利用 GenAI 和 Google Apps Script 來輕鬆自動化翻譯 Google Slides 備忘稿的過程。
即使你沒有程式基礎,
也可以通過簡單的 prompt 請 GenAI 幫你生成自動化程式碼,
並解決日常工作中的重複性任務。
這樣的解決方案不僅節省時間,還能提高工作效率,
讓你有更多時間專注在更具創造性的任務上。
你也可以思考如何將這個案例中的方法應用到自己的工作中,
讓自動化成為你的工作好夥伴。
下一篇,讓我們來看看關於 Email 有什麼自動化可以做。