Google Apps Script如何快速删除指定列 提升脚本执行速度
性能差的核心原因
你的代码逐列删除的逻辑,每删1列都会单独发起一次Google Sheets服务端请求,每次请求都有固定的网络传输、服务端鉴权、操作落盘的开销,总列数越多,累计耗时越长。
最优优化方案
用deleteColumns(批量删除连续列)接口,把零散的待删除列合并为3个连续区间,从右往左依次删除,全程最多只需要3次服务端调用,和逐列删除相比性能可以提升数十倍,且列数越多提升越明显。
针对你要保留G列(第7列)、M列(第13列)的需求,优化后代码如下:
const lastCol = newSheet.getLastColumn(); // 定义需要保留的列序号,从小到大排序 const keepCols = [7, 13].sort((a, b) => a - b); // 从最右侧区间开始删除,避免左侧列序号因删除操作偏移 // 1. 删除M列右侧的所有列 if (lastCol > keepCols[1]) { newSheet.deleteColumns(keepCols[1] + 1, lastCol - keepCols[1]); } // 2. 删除G列和M列中间的所有列 newSheet.deleteColumns(keepCols[0] + 1, keepCols[1] - keepCols[0] - 1); // 3. 删除G列左侧的所有列 if (keepCols[0] > 1) { newSheet.deleteColumns(1, keepCols[0] - 1); }
方案说明
- 代码加了边界判断,就算工作表总列数不足13列也不会抛出参数错误,兼容不同数据量的表格
- 如果后续需要调整保留的列,只需要修改
keepCols数组里的列序号即可,代码会自动计算待删除区间 - 如果你后续需要保留的列非常多、分布零散,可以换用「全量读取数据→过滤保留列→一次性写回表格→删除多余空列」的逻辑,全程API调用次数也能控制在5次以内,远快于逐列删除。
内容的提问来源于stack exchange,提问作者Khaled Ghazi
相关产品推荐
相关产品推荐

