GAS研習+Gemini打造報修系統
資料更新:20250329
資料更新:20250329
#自行設計程式步驟
1.開啟google試算表-擴充功能-Apps Script
2.利用生成式AI生成使用 Google Apps Script (GAS) 和 HTML 創建一個網頁應用程序同時給試算表設定。依據實際需求給予promt,將生成語法複製到程式碼.gs內。
#//'19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'(請替換為您的試算表 ID)
const SHEET_ID = '19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'; // 務必替換!
const SHEET_NAME = 'Sheet1'; // 務必替換!
程式碼.GS(複製下面語法)
//'19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'(請替換為您的試算表 ID)
const SHEET_ID = '19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'; // 務必替換!
const SHEET_NAME = 'Sheet1'; // 務必替換!
const SHEET = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
function doGet(e) {
return HtmlService.createTemplateFromFile('index')
.evaluate()
.setTitle('報修系統')
.addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
function submitForm(formData) {
try {
Logger.log("formData: " + JSON.stringify(formData)); // 除錯訊息
// 從 formData 物件提取數據
const timestamp = new Date();
const reporter = formData.reporter;
const location = formData.location;
const category = formData.category;
const description = formData.description;
const status = '待處理'; // 預設狀態
const technician = ''; // 預設為空
const notes = ''; // 預設為空
// 將數據添加到試算表
SHEET.appendRow([timestamp, reporter, location, category, description, status, technician, notes]);
return "報修成功!";
} catch (e) {
Logger.log(e);
return "報修失敗,請稍後再試。" + e;
}
}
function getRepairCategories() {
// 假設您的試算表有一個名為 "Categories" 的分頁,包含不同的報修類別
const categoriesSheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("Categories");
if (!categoriesSheet) {
return ["水電", "網路", "硬體", "其他"]; // 預設類別
}
const lastRow = categoriesSheet.getLastRow();
if (lastRow === 0) {
return ["水電", "網路", "硬體", "其他"]; // 預設類別
}
// 讀取 "Categories" 分頁第一欄的數據
const categoriesRange = categoriesSheet.getRange(1, 1, lastRow, 1);
const categoriesValues = categoriesRange.getValues();
// 將二維陣列轉換為一維陣列
const categories = categoriesValues.map(row => row[0]);
return categories;
}
3.完成程式碼.gs後再新增HTML(命名為index)並複製語法貼上。
換!#//'19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'(請替換為您的試算表 ID)
const SHEET_ID = '19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'; // 務必替換!
const SHEET_NAME = 'Sheet1'; // 務必替換!
index.html檔(複製下面語法)
//'19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'(請替換為您的試算表 ID)
const SHEET_ID = '19OXNEdvUs9ZzHr62GTPkvIw5O_716okfAI5PTmgClKQ'; // 務必替換!
const SHEET_NAME = 'Sheet1'; // 務必替換!
const SHEET = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME);
function doGet(e) {
return HtmlService.createTemplateFromFile('index')
.evaluate()
.setTitle('報修系統')
.addMetaTag('viewport', 'width=device-width, initial-scale=1');
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
function submitForm(formData) {
try {
Logger.log("formData: " + JSON.stringify(formData)); // 除錯訊息
// 從 formData 物件提取數據
const timestamp = new Date();
const reporter = formData.reporter;
const location = formData.location;
const category = formData.category;
const description = formData.description;
const status = '待處理'; // 預設狀態
const technician = ''; // 預設為空
const notes = ''; // 預設為空
// 將數據添加到試算表
SHEET.appendRow([timestamp, reporter, location, category, description, status, technician, notes]);
return "報修成功!";
} catch (e) {
Logger.log(e);
return "報修失敗,請稍後再試。" + e;
}
}
function getRepairCategories() {
// 假設您的試算表有一個名為 "Categories" 的分頁,包含不同的報修類別
const categoriesSheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("Categories");
if (!categoriesSheet) {
return ["水電", "網路", "硬體", "其他"]; // 預設類別
}
const lastRow = categoriesSheet.getLastRow();
if (lastRow === 0) {
return ["水電", "網路", "硬體", "其他"]; // 預設類別
}
// 讀取 "Categories" 分頁第一欄的數據
const categoriesRange = categoriesSheet.getRange(1, 1, lastRow, 1);
const categoriesValues = categoriesRange.getValues();
// 將二維陣列轉換為一維陣列
const categories = categoriesValues.map(row => row[0]);
return categories;
}
4.完成程式碼.gs及index.html後,進行部屬-設定-網頁應用程式-授予存取權,就能看到操作頁面網址。