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}