首頁/AI 講義/數位工具・自動化

數位工具・自動化 · Workspace+GAS+Gemini約 12 分鐘Automation

用 Gemini 自動生成提案 Docs 初稿

用 Gemini 自動生成提案 Docs 初稿 — 賴家榮 AI 教學

Overview這篇教你做什麼

寫提案最痛苦的往往是第一頁空白。這篇要教你用 Apps Script 串接 Gemini,只要輸入幾個重點,程式就會請 AI 生成完整初稿,並用 DocumentApp 自動排好標題、段落,產出一份可以直接編修的 Google 文件。

Key Takeaways

  • 把提案重點交給 Gemini 生成完整初稿
  • 用 DocumentApp 建立新文件並排版
  • 自動加上標題、章節與段落結構
  • 初稿存進你的雲端硬碟,隨開即改
  • 金鑰用 PropertiesService 保管,安全不外露
  • 全程雲端執行,換個重點就再生一份

核心依然是 askGemini 這個小函式負責問 AI;主流程用 DocumentApp 開新文件、把 Gemini 回來的內容一段段寫進去。有了初稿當底,你只要負責潤飾與確認,效率差很多。

Why為什麼要這樣做

從零寫提案要同時想架構、想措辭、還要顧格式,負擔很重。先讓 AI 依你的重點生出一份有頭有尾的初稿,你就從「無中生有」變成「修改既有」,心理門檻低很多,動筆也快很多。

而且用 DocumentApp 直接排版,省去複製貼上再手動加標題的功夫。程式一次把標題、章節、內文都排好,產出的就是一份格式整齊的 Google 文件,可以馬上分享、共編或列印。從輸入重點到拿到文件,全部一氣呵成。

Prepare開始前要準備什麼

Checklist

  • 一個可以使用 Google 文件與雲端硬碟的 Google 帳號
  • 一把 Gemini API 金鑰,到 ai.google.dev 免費申請
  • 先想好提案的幾個重點,例如對象、目標、預算、預期效益

提案初稿好不好,關鍵在你給的重點清不清楚。先把要提案的主題、對象、想達成的目標列出來,等一下把它們塞進提示,Gemini 就能依這些線索生成貼近需求的內容。

Steps一步一步實作

1開一個獨立的 Apps Script 專案

動作到 script.google.com 點「新專案」,因為這篇是要新建文件,用獨立專案最方便。

常見地雷這篇不用綁在某份文件上,用獨立專案即可;程式會自己建立新的 Google 文件。

2存好 Gemini 金鑰

動作在「專案設定」的「指令碼屬性」新增 GEMINI_API_KEY,貼上金鑰後儲存。

常見地雷屬性名稱要跟程式裡讀取的完全一致,大小寫底線都不能差。

3貼上 askGemini 函式

動作在程式碼區貼上下方第一段 askGemini。

常見地雷這段是共用的,若模型名稱打錯會拿到 404,貼上後別亂改網址。

4貼上主流程 createProposal

動作貼上第二段主流程,它會把你的重點組成提示、請 Gemini 寫初稿、再用 DocumentApp 建文件排版。

常見地雷把程式裡的重點變數換成你自己的提案內容,或改成從試算表、表單讀入。

5填入你的提案重點

動作在 createProposal 上方的 topic、audience、goal 等變數填入實際內容,例如主題、對象、目標。

常見地雷重點寫得越具體,AI 生出的初稿越貼題;只寫一兩個字容易得到空泛內容。

6執行並完成授權

動作選擇 createProposal 按「執行」,第一次會要求授權存取雲端硬碟與外部網路,按允許。

常見地雷授權時看到警告屬正常,選進階再繼續即可,這是自建程式的常見提示。

7打開生成的文件檢查

動作執行完,程式會在紀錄印出文件網址,點進去看初稿,確認標題與段落都排好了。

常見地雷如果內容跑成一整坨沒分段,多半是 Gemini 沒依格式回,回頭把提示的格式要求寫得更明確。

下面第一段是共用的 askGemini;第二段主流程用 DocumentApp 建立新文件,把 Gemini 回傳的內容依標題與段落寫進去。程式會請 AI 用特定符號標示標題,方便我們判斷該套用哪種樣式。

function askGemini(prompt) {
  const key = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=' + key;
  const payload = { contents: [{ parts: [{ text: prompt }] }] };
  const res = UrlFetchApp.fetch(url, { method:'post', contentType:'application/json', payload: JSON.stringify(payload), muteHttpExceptions:true });
  return JSON.parse(res.getContentText()).candidates[0].content.parts[0].text.trim();
}
function createProposal() {
  // 這裡填入你的提案重點
  const topic = '導入 AI 客服系統';
  const audience = '公司管理層';
  const goal = '降低客服人力成本、提升回覆速度';
  const prompt = '你是專業提案撰稿人。請用繁體中文寫一份提案初稿,主題是「' + topic + '」,' +
    '對象是' + audience + ',目標是' + goal + '。' +
    '結構包含:背景與問題、解決方案、預期效益、執行步驟、預算概估。' +
    '每個章節標題請用「## 標題」開頭獨立一行,章節內文用一般段落。內容具體可行,不要空話。';
  const content = askGemini(prompt);

  // 建立新文件並取得內文
  const doc = DocumentApp.create('提案初稿:' + topic);
  const body = doc.getBody();
  body.appendParagraph(topic).setHeading(DocumentApp.ParagraphHeading.TITLE);

  // 依 Gemini 標的 ## 判斷標題,其餘當內文段落
  content.split('\n').forEach(function(line) {
    const text = line.trim();
    if (text === '') return;
    if (text.indexOf('##') === 0) {
      body.appendParagraph(text.replace(/^##\s*/, ''))
          .setHeading(DocumentApp.ParagraphHeading.HEADING1);
    } else {
      body.appendParagraph(text);
    }
  });

  doc.saveAndClose();
  Logger.log('文件已建立:' + doc.getUrl());
}

Flow整個流程長這樣

從幾個重點到一份文件
1填入提案主題、對象與目標
2組出提示送給 Gemini 生成初稿
3取回帶章節標記的內容
4用 DocumentApp 建立新文件
5逐行判斷標題或內文並排版
6存檔並取得文件網址

這個流程和程式碼一一對應:先給重點、請 AI 寫、再逐行排進文件。理解逐行判斷標題這一步之後,你就能自訂更複雜的排版,例如加上項目符號或分頁。

Tips幾個實用小技巧

FAQ常見問題

常見問題 FAQ

生成的文件會存在哪裡?

用 DocumentApp.create 建立的文件,會存到執行這支程式的 Google 帳號的雲端硬碟根目錄。程式跑完會在紀錄印出文件網址,點進去就能打開。如果想放到特定資料夾,可以搭配 DriveApp 把檔案移過去,或先建立資料夾再把文件搬進該資料夾,管理起來更整齊。

為什麼標題沒有套用樣式?

這通常是 Gemini 沒有照約定用 ## 標示標題。程式是靠每行開頭有沒有 ## 來判斷要不要套標題樣式,AI 一旦沒照做,程式就會把整行都當成內文。解法是把提示裡的格式要求寫得更清楚,明確要求每個章節標題都要用 ## 開頭並獨立一行。

可以指定文件的資料夾嗎?

可以,但要多一個步驟。DocumentApp 建立的文件預設在雲端硬碟根目錄,你可以用 DriveApp 取得該檔案,再用 moveTo 把它搬到指定資料夾。或者先用 DriveApp 建好或找到資料夾,取得資料夾物件後把文件加進去。這樣批次生成的提案就能自動分類收好。

初稿內容不夠專業怎麼辦?

初稿品質主要看提示。把對象、目標、要涵蓋的章節寫得越具體,AI 生出的內容越貼題。你也可以在提示裡設定語氣,例如「正式、對管理層」,或附上一段你們公司過往提案的風格範例讓它模仿。記得 AI 產出的是底稿,最後仍要由你潤飾與確認事實。

每次生成的內容都一樣嗎?

不會完全一樣。AI 的回答本來就帶有一點變化,同樣的重點跑兩次,措辭和舉例可能略有不同。這其實是好事,你可以多跑幾次,從幾份初稿裡挑最合適的來改。如果需要比較穩定的結果,就把提示寫得更嚴謹,把章節與要點都框死,變化就會變小。

可以一次生成很多份提案嗎?

可以。把 topic、audience、goal 這些變數改成從試算表逐列讀取,用迴圈跑過每一列,就能一次生成多份提案,每份存成獨立文件。不過一次跑太多份可能會超過單次執行時間,或碰到 AI 的請求限制,建議分批處理,並在每份之間稍作間隔。

文件可以自動分享給別人嗎?

可以。取得文件之後,能用 DriveApp 的分享設定加入協作者的電子郵件,設定成可檢視或可編輯。也可以搭配 MailApp,把 doc.getUrl() 取得的網址寄給相關同事。這樣從生成到通知就完全自動化,對方一收到信就能點開初稿開始編修。

金鑰會不會被寫進文件裡?

不會。金鑰是存在指令碼屬性,程式用 PropertiesService 讀取,只在呼叫 Gemini 時暫時使用,完全不會出現在生成的文件內容裡,也不會寫進任何儲存格或段落。只要你不自己把金鑰打進提示文字,它就一直安全地待在屬性服務裡。

生成後可以再叫 AI 修改嗎?

可以,做法是把現有內容連同修改指示一起交給 Gemini。例如讀出文件目前的段落,加上「請把預算章節寫得更詳細」這類指令,請 AI 回傳修改後版本,再更新文件。這樣就能做出反覆潤稿的流程,不過每次修改都會消耗額度,改幾輪滿意即可。

這套只能寫提案嗎?

不是。同樣的做法可以生成各種文件,例如會議記錄、產品說明、教學講義、活動企劃。你只要換掉提示,告訴 Gemini 要寫什麼、包含哪些章節,再用 DocumentApp 排版即可。這篇用提案當例子,把主題和結構換一換,就能套用到你需要的任何文件類型。

CTA想更進一步嗎

從空白頁到一份成形初稿,只要幾秒。如果你想把這類文件自動化擴大到整個團隊的日常,讓專業講師規劃完整流程與訓練會更有效率。

想讓團隊用 AI+自動化把重複工作交給流程?賴家榮提供 Workspace/GAS/Gemini 企業內訓與大學課程。

預約授課・免費諮詢

本文為賴家榮 AI 教學中心原創教學內容;想讓團隊學會用 AI,歡迎看AI 課程或預約授課 →

代表圖片來源:圖片來源:Pexels

Your turn

把 AI,變成團隊真的用得上的能力。

不論你在哪個產業,賴家榮都能帶團隊把 AI 學到真的用得上。

預約授課・免費諮詢