Google Sheets 食譜管理系統

資料存儲問題已修復

問題已識別: 連接測試成功但資料存儲失敗,這通常是權限或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:

  1. 點擊"部署" > "新增部署"
  2. 選擇"網頁應用程式"
  3. 設置執行身份為"我",權限為"任何人"
  4. 點擊"部署"並複製新的 URL
  5. 將新 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

系統日誌

[系統啟動] 食譜管理系統已加載
[信息] 檢測到連接測試成功但資料發送失敗
[解決方案] 請使用上方提供的修正後程式碼