diff --git a/google-script.js b/google-script.js index 0c8a797..38b606a 100644 --- a/google-script.js +++ b/google-script.js @@ -11,24 +11,40 @@ function doPost(e) { try { var data = JSON.parse(e.postData.contents); - var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); + var ss = SpreadsheetApp.getActiveSpreadsheet(); + var sheet; + + // 1. Get or Create the target sheet + if (data.sheetName) { + sheet = ss.getSheetByName(data.sheetName); + if (!sheet) { + sheet = ss.insertSheet(data.sheetName); + } + } else { + sheet = ss.getActiveSheet(); + } - // Get headers - var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; - if (headers[0] === "" && sheet.getLastColumn() === 1) { - // New sheet, set headers from JSON keys + // 2. Get headers + var lastCol = sheet.getLastColumn(); + var headers = []; + if (lastCol > 0) { + headers = sheet.getRange(1, 1, 1, lastCol).getValues()[0]; + } + + // 3. If sheet is empty, set headers from JSON keys + if (headers.length === 0 || headers[0] === "") { headers = Object.keys(data); sheet.appendRow(headers); } - // Map data to headers + // 4. Map data to headers var row = headers.map(function(header) { - return data[header] || "N/A"; + return data[header] !== undefined ? data[header] : "N/A"; }); sheet.appendRow(row); - return ContentService.createTextOutput(JSON.stringify({ status: "success" })) + return ContentService.createTextOutput(JSON.stringify({ status: "success", sheet: sheet.getName() })) .setMimeType(ContentService.MimeType.JSON); } catch (error) { @@ -37,7 +53,6 @@ function doPost(e) { } } -// Handle preflight (for some environments, though 'no-cors' usually avoids this) function doOptions(e) { return ContentService.createTextOutput("") .setMimeType(ContentService.MimeType.TEXT); diff --git a/sidepanel.html b/sidepanel.html index c3931b0..8af39fd 100644 --- a/sidepanel.html +++ b/sidepanel.html @@ -41,7 +41,8 @@
- + +
diff --git a/sidepanel.js b/sidepanel.js index 462db78..bca6d32 100644 --- a/sidepanel.js +++ b/sidepanel.js @@ -10,6 +10,7 @@ const resultsArea = document.getElementById('results'); // Preset Management Elements const newPresetName = document.getElementById('newPresetName'); +const newPresetSheet = document.getElementById('newPresetSheet'); const newPresetFields = document.getElementById('newPresetFields'); const addPresetBtn = document.getElementById('addPreset'); const presetList = document.getElementById('presetList'); @@ -22,8 +23,8 @@ const configContent = document.getElementById('configContent'); const configChevron = document.getElementById('configChevron'); const DEFAULT_PRESETS = [ - { id: 'p1', name: '提取笔记本', fields: '品牌, CPU, 内存, 存储, 价格, URL' }, - { id: 'p2', name: '提取外设', fields: '品牌, 型号, 连接方式, 电池寿命, 价格, URL' } + { id: 'p1', name: '提取笔记本', sheetName: '笔记本', fields: '品牌, CPU, 内存, 存储, 价格, URL' }, + { id: 'p2', name: '提取外设', sheetName: '外设', fields: '品牌, 型号, 连接方式, 电池寿命, 价格, URL' } ]; let currentPresets = []; @@ -68,15 +69,17 @@ saveConfigBtn.addEventListener('click', () => { // Preset Management Logic addPresetBtn.addEventListener('click', async () => { const name = newPresetName.value.trim(); + const sheetName = newPresetSheet.value.trim(); const fields = newPresetFields.value.trim(); if (!name || !fields) return alert('请输入名称和字段'); const { userPresets = DEFAULT_PRESETS } = await chrome.storage.local.get('userPresets'); - const newPreset = { id: Date.now().toString(), name, fields }; + const newPreset = { id: Date.now().toString(), name, sheetName, fields }; currentPresets = [...userPresets, newPreset]; await chrome.storage.local.set({ userPresets: currentPresets }); newPresetName.value = ''; + newPresetSheet.value = ''; newPresetFields.value = ''; renderPresets(currentPresets); }); @@ -99,7 +102,7 @@ function renderPresets(presets) { item.className = 'flex items-center justify-between bg-white p-3 mb-2 rounded-lg border border-gray-200 shadow-sm transition-all hover:border-indigo-200'; item.innerHTML = `
-
${preset.name}
+
${preset.name} ${preset.sheetName ? `#${preset.sheetName}` : ''}
${preset.fields}