今天,我們來聊聊一個跟簡報相關的實用案例。
如果你像我一樣:
英文不夠好,但有時候必須用英文做簡報,
那大概也會像我一樣:
把簡報的英文逐字稿都先準備好。
但如果你真的像我一樣,
連英文逐字稿都不知道怎麼寫,
那很可能就只能跟我一樣,
先寫中文的稿子再用翻譯工具翻成英文。
今天這篇文章就要教你如何利用 GenAI 和 Google Apps Script 自動翻譯 Google Slides 備忘稿。
我在準備簡報的時候,
會幫每一頁的切換時機都想好一個轉場銜接的台詞。
所以我的每一段逐字稿都會有很精準對應的投影片頁數,
該在哪裡講,就在哪裡講。
因此我寫逐字稿的時候,
不會把整個簡報的內容寫在一處,
而是會分散寫在各頁投影片下方。
但是當我把每一頁的稿子各自寫好後,
也就沒辦法整個複製拿去翻譯。
而是要一頁一頁地複製、一段一段地貼上,
非常麻煩。
我們可以這樣發問:
我有一份 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.');
}
這段程式碼確保能夠順利處理有備忘稿的投影片,同時避免翻譯失敗或無效翻譯的問題。
有興趣的人可以看一下以下程式碼的細節說明,
沒興趣就可以快速略過,不影響我們的自動化目標。
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.');
當所有投影片的備忘稿翻譯完成後,記錄一條訊息,標示翻譯過程已完成。
執行程式前的投影片長這樣:
執行程式後的投影片長這樣:
而且不只這一頁,是整份簡報的每一頁都自動翻譯完了。
針對備忘稿的處理,
我自己還做了一個功能是:把所有備忘稿集結到最後一頁,
串成一篇完整的文章。
用意是我想要整篇拿去請 ChatGPT 讀給我聽,
幫助我準備英文簡報。
我不想要一段一段分開貼給 ChatGPT,
想要快速地整份貼上,請他整份一起讀完。
關於我怎麼利用 ChatGPT 協助我準備英文簡報,
可以參考這篇文章
這個案例展示了如何利用 GenAI 和 Google Apps Script 來輕鬆自動化翻譯 Google Slides 備忘稿的過程。
即使你沒有程式基礎,
也可以通過簡單的 prompt 請 GenAI 幫你生成自動化程式碼,
並解決日常工作中的重複性任務。
這樣的解決方案不僅節省時間,還能提高工作效率,
讓你有更多時間專注在更具創造性的任務上。
你也可以思考如何將這個案例中的方法應用到自己的工作中,
讓自動化成為你的工作好夥伴。
下一篇,讓我們來看看關於 Email 有什麼自動化可以做。
《零基礎快速入門:GenAI 搭配 Google Apps Script 的工作自動化寶典》Chapter 4-4 真實案例: