Google App Script:向Sheet写入数据前高效修改数组添加列
高效在AdSense导入数据中插入固定值列(无for循环)
要在写入Sheet前给每行插入固定值的列,最高效的方式是利用JavaScript数组的map方法和扩展运算符(...)构造新的二维数组,完全不需要for循环,且性能优于手动循环。
核心思路
通过map遍历每一行数据,对原行数组进行拆分/合并,插入固定值列,最终生成包含新列的二维数组,再一次性写入Sheet(减少API调用次数,这也是Google App Script的关键性能优化点)。
示例场景
假设原数据每行结构为[日期, 展示量, 点击量, ...],以下是几种常见插入需求的实现:
1. 在所有行开头插入一列固定值
比如给所有数据标记所属站点:
const siteName = "我的博客站点"; // 处理数据:给每行开头添加站点名称列 const processedData = report.rows.map(row => { const originalRow = row.cells.map(cell => cell.value); return [siteName, ...originalRow]; }); // 写入Sheet,注意列数更新为原8列+1列=9列 sheet.getRange(2, 1, processedData.length, processedData[0].length) .setValues(processedData);
2. 在指定位置插入一列固定值
比如在「点击量」(原第4列,数组索引3)之前插入设备类型列:
const deviceType = "PC端"; const processedData = report.rows.map(row => { const originalRow = row.cells.map(cell => cell.value); // 拆分原数组,在索引3的位置插入固定值 return [ ...originalRow.slice(0, 3), // 取前3个元素(日期、展示量、点击量) deviceType, ...originalRow.slice(3) // 取剩余的所有元素 ]; });
3. 一次性插入多列固定值
比如在开头同时插入站点和月份列:
const fixedColumns = ["我的博客站点", "2023年8月"]; const processedData = report.rows.map(row => { const originalRow = row.cells.map(cell => cell.value); // 合并固定列数组与原行数组 return [...fixedColumns, ...originalRow]; });
性能说明
map是JavaScript引擎原生优化的数组遍历方法,性能比手动for循环更稳定高效。- 一次性构造完整的二维数组后调用
setValues,避免了多次调用Sheet API(Google App Script中API调用是主要性能瓶颈之一)。
内容的提问来源于stack exchange,提问作者Adrien Hingert
相关产品推荐
相关产品推荐

