iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
IT 管理

無職轉生:到了IT就拿出真本事!IT 維運 30 日修煉系列 第 13

Day 13 - 章節十二:Gemini API × GAS 問卷工坊 ‧ 自動生成智慧表單(AI 修練篇)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250913/20178480DSg6RBKRjE.png

在數位魔法學院的深處,每當需要收集意見、調查滿意度,或是進行市場研究時,傳統的問卷製作總是讓冒險者們頭疼不已。手工設計問題、思考選項、建立表單......這些繁瑣的步驟往往耗費大量時間與精力。

此刻,一道神奇的咒語在法師塔中被發現:

  • Gemini API —— AI 智慧問卷生成法杖
  • Google Apps Script —— 表單自動化魔法陣
  • Google Forms & Sheets —— 資料收集與分析聖器

它們能夠將簡單的主題描述,瞬間轉化為專業完整的問卷表單,讓冒險者從繁瑣的手工作業中解脫,專注於更重要的策略思考。

🔐 為什麼需要這套問卷魔法?

  • 時間效率革命:從構思到完成問卷,從數小時縮短到數分鐘
  • 專業品質保證:AI 自動生成結構完整、邏輯清晰的問題設計
  • 格式標準化:自動建立單選、多選、文字回覆等不同題型
  • 即時部署上線:一鍵生成可分享的 Google Form 連結
  • 數據自動收集:問卷回覆直接匯入 Google Sheets 進行分析

⚙️ 魔法工具準備

必備神器:

  • Google Apps Script - 雲端自動化平台
  • Gemini API - Google 的生成式 AI 服務
  • Google Forms - 問卷表單建立工具
  • Google Sheets - 回覆數據收集分析

環境設定:

  1. 取得 Gemini API Key
  2. 開啟 Google Apps Script
  3. 確保 Google Drive 權限開啟

⚙️ 如何施展問卷魔法?(Step by step)

1) 魔法陣建立 — 程式碼部署

步驟

  1. 開啟 Google Apps Script,建立新專案
  2. 貼入問卷生成器程式碼
  3. 將你的 Gemini API Key 填入 apiKey 變數
  4. 儲存專案並命名為「AI問卷生成器」

核心咒語設定

// 🔧 在這裡修改你的問卷主題
var SURVEY_TOPIC = "生成一份鐵人賽參賽者申請問卷,包含個人資料、體能狀況、參賽經驗及緊急聯絡人欄位。";
/**
 * Day13:問卷生成器 (簡化版本)
 * 使用方式:直接在程式碼中修改主題,然後執行函數
 */

function generateSurveyDirect() {
  var SURVEY_TOPIC = "生成一份鐵人賽參賽者申請問卷,包含個人資料、體能狀況、參賽經驗及緊急聯絡人欄位。";
  try {
    Logger.log('開始生成問卷,主題:' + SURVEY_TOPIC);
    var draftQuestions = callGeminiAPI(SURVEY_TOPIC);
    if (!draftQuestions || draftQuestions.includes("錯誤")) throw new Error("API 呼叫失敗:" + draftQuestions);
    Logger.log('✅ API 回應成功');
    Logger.log('生成的問卷內容:\n' + draftQuestions);
    console.log("問卷預覽已生成!請查看執行紀錄確認內容。");
    PropertiesService.getScriptProperties().setProperty('DRAFT_QUESTIONS', draftQuestions);
    return draftQuestions;
  } catch (error) {
    Logger.log('❌ generateSurveyDirect 發生錯誤:' + error.toString());
    console.log('錯誤:' + error.toString());
  }
}

function confirmAndCreateForm() {
  try {
    var draftQuestions = PropertiesService.getScriptProperties().getProperty('DRAFT_QUESTIONS');
    if (!draftQuestions) { console.log('❌ 沒有找到問卷草稿,請先執行 generateSurveyDirect()'); return; }
    Logger.log('開始建立表單...');
    createFormFromText(draftQuestions);
    PropertiesService.getScriptProperties().deleteProperty('DRAFT_QUESTIONS');
  } catch (error) {
    Logger.log('❌ confirmAndCreateForm 發生錯誤:' + error.toString());
    console.log('建立表單失敗:' + error.toString());
  }
}

function generateSurveyDirectly() {
  var SURVEY_TOPIC = "生成一份鐵人賽參賽者申請問卷";
  try {
    Logger.log('一鍵生成問卷,主題:' + SURVEY_TOPIC);
    var draftQuestions = callGeminiAPI(SURVEY_TOPIC);
    if (!draftQuestions || draftQuestions.includes("錯誤")) throw new Error("API 呼叫失敗:" + draftQuestions);
    Logger.log('✅ API 回應成功,直接建立表單...');
    createFormFromText(draftQuestions);
  } catch (error) {
    Logger.log('❌ generateSurveyDirectly 發生錯誤:' + error.toString());
    console.log('錯誤:' + error.toString());
  }
}

function callGeminiAPI(userPrompt) {
  var apiKey = 'YOUR_API_KEY_HERE';
  var url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent';
  var fullPrompt = `請根據以下主題生成一份中文問卷,格式要求:
標題:[問卷標題]
每個問題後面標註類型:(單選)、(多選)、(文字回覆)或(段落文字)
主題:${userPrompt}
`;

  var payload = {"contents":[{"parts":[{"text":fullPrompt}]}], "generationConfig":{"temperature":0.3,"maxOutputTokens":1200}};
  var options = {method:'POST', contentType:'application/json', headers:{'X-goog-api-key':apiKey}, payload:JSON.stringify(payload), muteHttpExceptions:true};

  try {
    var response = UrlFetchApp.fetch(url, options);
    if (response.getResponseCode() !== 200) return "錯誤:API 呼叫失敗 (HTTP " + response.getResponseCode() + ")";
    var result = JSON.parse(response.getContentText());
    if (result.candidates && result.candidates.length > 0 && result.candidates[0].content) {
      return result.candidates[0].content.parts[0].text;
    } else { return "錯誤:API 回應格式不正確"; }
  } catch (error) {
    return "錯誤:" + error.toString();
  }
}

function createFormFromText(questionsText) {
  try {
    var lines = questionsText.split('\n').map(line => line.trim()).filter(line => line !== '');
    var formTitle = lines.find(line => line.match(/^標題[::]/))?.replace(/^標題[::]\s*/, '') || 'AI 生成問卷';
    var form = FormApp.create(formTitle).setDescription('此問卷由 AI 自動生成,感謝您的填寫!');
    for (var i=0;i<lines.length;i++) {
      var line = lines[i];
      if (!line || line.startsWith('-')) continue;
      if (line.includes('(單選)')) {
        var title=line.replace('(單選)','').replace(/^\d+\.?\s*/,'').trim(); var choices=[];
        while(i+1<lines.length && lines[i+1].startsWith('-')) {i++; choices.push(lines[i].replace(/^-\s*/,'').trim());}
        if(choices.length>0) form.addMultipleChoiceItem().setTitle(title).setChoiceValues(choices).setRequired(true);
      } else if (line.includes('(多選)')) {
        var title=line.replace('(多選)','').replace(/^\d+\.?\s*/,'').trim(); var choices=[];
        while(i+1<lines.length && lines[i+1].startsWith('-')) {i++; choices.push(lines[i].replace(/^-\s*/,'').trim());}
        if(choices.length>0) form.addCheckboxItem().setTitle(title).setChoiceValues(choices);
      } else if (line.includes('(文字回覆)')) {
        form.addTextItem().setTitle(line.replace('(文字回覆)','').replace(/^\d+\.?\s*/,'').trim());
      } else if (line.includes('(段落文字)')) {
        form.addParagraphTextItem().setTitle(line.replace('(段落文字)','').replace(/^\d+\.?\s*/,'').trim());
      }
    }
    var sheet = SpreadsheetApp.create(formTitle + ' - 回覆資料');
    form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet.getId());
    Logger.log('✅ 問卷表單建立完成! 編輯表單:' + form.getEditUrl());
  } catch(error) { Logger.log('❌ 建立表單時發生錯誤:' + error.toString()); }
}

function testGeminiAPI() {
  var testResult = callGeminiAPI("請生成一個簡單的測試問卷");
  Logger.log("API 測試結果:" + testResult);
  return testResult;
}

function showAvailableFunctions() {
  Logger.log("1. generateSurveyDirect() - 生成問卷草稿並顯示預覽");
  Logger.log("2. confirmAndCreateForm() - 確認草稿並建立表單");
  Logger.log("3. generateSurveyDirectly() - 一鍵生成問卷(跳過確認)");
  Logger.log("4. testGeminiAPI() - 測試 API 連線");
}

2) 智慧問卷生成術 — 兩階段施法流程

第一階段:生成預覽咒語

generateSurveyDirect(); // 生成問卷草稿並顯示預覽

https://ithelp.ithome.com.tw/upload/images/20250913/20178480IZrLY46MDE.png

執行效果

  • AI 自動分析主題並生成專業問卷結構
  • 包含單選題、多選題、文字回覆題等多種題型
  • 在執行紀錄中顯示完整問卷預覽
  • 暫存草稿等待確認

第二階段:確認建立咒語

confirmAndCreateForm(); // 確認草稿並建立表單

https://ithelp.ithome.com.tw/upload/images/20250913/201784806uBr5VwdSP.png

https://ithelp.ithome.com.tw/upload/images/20250913/201784802ePwCL2oOd.png

執行效果

  • 自動建立 Google Form 表單
  • 同步生成 Google Sheets 回覆收集表
  • 提供編輯、分享、數據分析等完整連結

3) 一鍵魔法 — 跳過確認直接生成

對於信任 AI 生成品質的進階法師:

generateSurveyDirectly(); // 一鍵生成問卷(跳過確認)

🌟 進階魔法應用技巧

主題設定魔法

  • 具體明確:「餐廳用餐體驗調查」比「餐廳調查」效果更好
  • 目標導向:「員工離職原因分析問卷」能生成更精準的問題
  • 情境描述:「線上課程學習成效與滿意度調查」提供更多背景資訊

問卷品質優化術

  • 預覽確認:使用兩階段流程確保問卷品質
  • 題目調整:可在 API 回應後手動微調問題內容
  • 選項優化:檢查選項是否涵蓋所有可能情況

自動化整合魔法

  • 表單客製化:建立後可進入 Google Forms 調整樣式與設定
  • 數據分析:Google Sheets 自動收集回覆,支援圖表與樞紐分析

批次處理咒語

// 修改程式碼中的主題陣列,可同時生成多個問卷
var topics = [
  "餐廳用餐體驗調查",
  "線上課程學習回饋", 
  "員工工作滿意度調查"
];

🎯 實戰應用場景

商業應用魔法

  • 客戶滿意度調查:自動生成專業服務品質問卷
  • 市場調研問卷:快速建立產品需求與偏好調查
  • 員工回饋收集:建立內部意見與建議收集機制

教育培訓魔法

  • 課程評估問卷:自動生成教學效果與滿意度調查
  • 學習需求分析:了解學員背景與期望的標準化問卷
  • 活動回饋收集:快速建立研習營或工作坊評估表單

專案管理魔法

  • 專案回顧問卷:自動生成團隊協作與流程改善調查
  • 需求收集表單:快速建立功能需求與優先順序問卷
  • 風險評估調查:生成專案風險識別與影響度問卷

🔧 故障排除魔法陣

常見問題與解決方案

API 連線失效

testGeminiAPI(); // 測試 API 連線狀態

權限設定問題

  • 確認 Google Apps Script 有 Drive 和 Forms 權限
  • 檢查 API Key 是否正確且有足夠配額

表單格式異常

  • 檢查生成的問卷是否符合預期格式
  • 確認題目類型標註正確:(單選)、(多選)、(段落文字)

🌟 總結

透過 Google Apps ScriptGemini API 的完美結合,你可以將問卷設計從繁瑣的手工作業轉化為智慧自動化流程:

  • 效率革命:數分鐘完成專業問卷設計與部署
  • 品質保證:AI 生成結構完整、邏輯清晰的問卷內容
  • 無縫整合:自動建立表單、收集數據、分析結果的完整工作流
  • 彈性客製:支援預覽確認與手動調整的雙重保障
  • 擴展應用:適用於商業、教育、專案管理等多種場景

身為數位時代的問卷魔法師,掌握這套 AI 自動化咒語,就能在資料收集的戰場上如虎添翼,讓每一次的意見調查都成為洞察用戶需求、優化服務品質的強大武器。


相關連結


上一篇
Day 12 - 章節十一:Gemini 魔法:掌握 Gmail、Drive、Docs、Sheets、日曆(AI 修練篇)
下一篇
Day 14 - 章節十三:Gmail 守護者 ‧ GAS 郵件監控術與異常預警系統(自動化篇)
系列文
無職轉生:到了IT就拿出真本事!IT 維運 30 日修煉14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言