52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
/**
|
|
* 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;
|
|
});
|
|
} |