問題已識別: 連接測試成功但資料存儲失敗,這通常是權限或CORS問題
解決方案
1
更新 Google Apps Script 程式碼
請使用以下修正後的程式碼替換您原有的 Google Apps Script 程式碼:
// 修正後的 Google Apps Script 程式碼 function doPost(e) { try { // 設置 CORS 頭部 var headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }; // 處理預檢請求 (OPTIONS) if (e.requestMethod === 'OPTIONS') { return ContentService.createTextOutput(JSON.stringify({})) .setMimeType(ContentService.MimeType.JSON) .setHeaders(headers); } const data = JSON.parse(e.postData.contents); const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 如果是獲取食譜請求 if (data.action === "getRecipes") { return getRecipes(sheet, headers); } // 如果是添加食譜請求 if (data.action === "addRecipe") { return addRecipe(sheet, data, headers); } return ContentService.createTextOutput(JSON.stringify({ status: "error", message: "未知操作" })).setMimeType(ContentService.MimeType.JSON).setHeaders(headers); } catch (error) { return ContentService.createTextOutput(JSON.stringify({ status: "error", message: error.toString() })).setMimeType(ContentService.MimeType.JSON).setHeaders(headers); } } function doGet(e) { var headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }; return ContentService.createTextOutput(JSON.stringify({ status: "error", message: "請使用POST請求" })).setMimeType(ContentService.MimeType.JSON).setHeaders(headers); } function getRecipes(sheet, headers) { const data = sheet.getDataRange().getValues(); const recipes = {}; // 跳過標題行 for (let i = 1; i < data.length; i++) { const row = data[i]; const title = row[0]; if (!recipes[title]) { recipes[title] = { title: title, ingredients: [], steps: row[5] || "", timestamp: row[6] || "" }; } recipes[title].ingredients.push({ name: row[1] || "", weight: row[2] || 0, percent: row[3] || "", desc: row[4] || "" }); } return ContentService.createTextOutput(JSON.stringify({ status: "success", data: Object.values(recipes) })).setMimeType(ContentService.MimeType.JSON).setHeaders(headers); } function addRecipe(sheet, data, headers) { const timestamp = new Date().toISOString(); data.ingredients.forEach(ingredient => { sheet.appendRow([ data.title, ingredient.name, ingredient.weight, ingredient.percent, ingredient.desc || "", data.steps, timestamp ]); }); return ContentService.createTextOutput(JSON.stringify({ status: "success", message: "食譜已添加" })).setMimeType(ContentService.MimeType.JSON).setHeaders(headers); }
2
重新部署 Apps Script
更新程式碼後,請重新部署您的 Apps Script:
- 點擊"部署" > "新增部署"
- 選擇"網頁應用程式"
- 設置執行身份為"我",權限為"任何人"
- 點擊"部署"並複製新的 URL
- 將新 URL 貼到下方的輸入框中
3
檢查 Google Sheets 權限
確保您的 Google Sheets 文件已設置為"知道連結的任何人均可編輯":
Web App URL 設置
請貼上從 Google Apps Script 獲取的 Web App URL
食譜管理
除錯資訊
食譜管理
請先更新 Apps Script 程式碼並重新部署
食譜列表
尚未添加任何食譜,請使用上方表單新增您的第一個食譜。
除錯資訊
系統狀態和診斷資訊
當前配置
Web App URL: https://script.google.com/macros/s/AKfycbzqF1awerKdUP4vfanhf-l2ZOmLO4jkVu67_opez5ZpUCQ2-MNProinIFMzXgthWZetXg/exec
模式: 本地模式
食譜數量: 0
系統日誌
[系統啟動] 食譜管理系統已加載
[信息] 檢測到連接測試成功但資料發送失敗
[解決方案] 請使用上方提供的修正後程式碼