/** * Web App 入口 */ function doGet() { return HtmlService.createTemplateFromFile('index') .evaluate() .setTitle('软件安全列表Plus') .addMetaTag('viewport', 'width=device-width, initial-scale=1') .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); } /** * 一次性获取所有 Sheet 数据,减轻多次请求的负担 */ function getAllData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheets = ["Main", "CN", "EN", "ES"]; const result = {}; sheets.forEach(name => { const sheet = ss.getSheetByName(name); if (sheet) { result[name.toLowerCase()] = getRowsData(sheet); } else { result[name.toLowerCase()] = []; } }); return result; } /** * 辅助函数:将 Sheet 转为对象数组 */ function getRowsData(sheet) { const data = sheet.getDataRange().getValues(); if (data.length < 1) return []; const headers = data[0]; const rows = data.slice(1); return rows.map(row => { let obj = {}; headers.forEach((header, i) => { // 这里的处理是为了防止日期对象在传输时出错,转为 ISO 字符串 let val = row[i]; if (val instanceof Date) { val = val.toISOString(); } obj[header] = val; }); return obj; }); }