如何用RangeListApp将Google Sheets指定K列区域值写入I列?
Google Sheets 脚本:将指定区域计算值复制到目标列
问题背景
Google Sheets中K列为带求和公式的预算列,需将K列指定区域的计算结果值复制到I列。由于I、K列均包含多处求和公式,无法直接整列复制覆盖,计划将脚本绑定按钮重复执行。
当前使用Tanaike开发的RangeListApp引用多区域,已成功获取K列指定区域的显示值(日志返回正确结果),但写入I列时遇到问题:
- 若将
values设为rangeList,单元格会写入区域字符串(如K4:K6)而非计算数值; - 若将
values设为获取到的Range对象r,单元格显示[object Object]。
解决方案
核心是遍历RangeList中的每个Range对象,提取其计算值后,对应写入I列的目标区域。以下是修正后的脚本:
function copyCalculatedValues() { const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 替换为你的K列源区域和对应I列目标区域,需一一对应 const sourceRangeStrs = ["K4:K6", "K9:K12", "K15"]; const targetRangeStrs = ["I4:I6", "I9:I12", "I15"]; // 获取源区域集合 const sourceRangeList = RangeListApp.getRangeList(activeSheet, sourceRangeStrs); const sourceRanges = sourceRangeList.getRanges(); // 逐个处理区域,复制计算值到目标区域 sourceRanges.forEach((sourceRange, idx) => { // 获取计算后的数值(若需保留显示格式,改用getDisplayValues()) const calcValues = sourceRange.getValues(); // 获取对应目标区域并写入值 activeSheet.getRange(targetRangeStrs[idx]).setValues(calcValues); }); }
关键说明
- 区域对应:源区域和目标区域的数量、单元格范围必须一一匹配,避免写入错位;
- 值的提取:使用
getValues()获取单元格的计算结果(二维数组格式),而非Range对象或区域字符串; - 格式保留:如果需要保留K列的显示格式(如货币、百分比),将
getValues()替换为getDisplayValues(),setValues()替换为setDisplayValues()即可。
内容的提问来源于stack exchange,提问作者Mark McCune
相关产品推荐
相关产品推荐

