如何在Google Sheets的onEdit脚本中高效为JSON添加列头键值映射
解决方案
仅需在现有代码基础上增加表头读取、键值映射两步即可实现需求,全程无额外冗余操作,性能开销可忽略,是当前场景下的最高效实现方案。
核心修改点
- 新增读取表格第一行的表头数据逻辑
- 新增行号判断规则,避免编辑表头时触发无效推送
- 用
Array.reduce方法将表头与当前行数值一一映射为键值对对象 - 优化取值逻辑,直接用事件对象携带的更新值,无需重复读取单元格
修改后完整代码
function onEdit(e){ const endColumn = 20; //<--- number of columns const sheet = SpreadsheetApp.getActiveSheet(); const range = e.range; const row = range.rowStart; // 跳过表头行的编辑,避免推送无效数据,不需要可删除该行 if (row === 1) return; // 获取表头行数据 const headers = sheet.getRange(1, 1, 1, endColumn).getValues()[0]; // 获取当前编辑行的全列数据 const currentRowValues = sheet.getRange(row, 1, 1, endColumn).getValues()[0]; // 表头与数值映射为键值对 const rowObject = headers.reduce((obj, header, index) => { // 空表头容错处理,不需要可直接赋值obj[header] = currentRowValues[index] const key = header ? header : `column_${index + 1}`; obj[key] = currentRowValues[index]; return obj; }, {}); const formData = { 'CELL_UPDATED': range.getA1Notation(), 'NEW_VALUE': e.value, 'SHEET': sheet.getName(), 'CONTENT': JSON.stringify(rowObject) }; const options = { 'method' : 'post', 'payload' : formData }; UrlFetchApp.fetch('webhookurl', options); }
内容的提问来源于stack exchange,提问作者ThomasSt
相关产品推荐
相关产品推荐

