为了账号安全,请及时绑定邮箱和手机立即绑定

Google Apps 脚本 - 从动态更改的选项卡名称中查找范围总和

Google Apps 脚本 - 从动态更改的选项卡名称中查找范围总和

慕虎7371278 2023-07-20 10:21:01
我有 10 个选项卡,每个选项卡的名称随着工作完成而不断变化。所以我使用数组来查找工作表。主工作表需要显示所有 10 个选项卡 AF3:AF 中同一列的值此代码只能返回 1 个单元格的值,而不是范围。function MasterTotals() {var ss = SpreadsheetApp.getActiveSpreadsheet();var sheet1 = ss.getSheetByName('Master Sales');var sheet = ss.getSheets()[5,6,7,8,9,10,11,12,13,14];var value = sheet.getRange('AF3:AF').getValue();sheet1.getRange('AM2:AM').setValue(value); so [5] should return answer to AM2 - [6] should return answer to AM3 etc etcError returned is **cannot read property getRange**Appreciate any help on what I am not seeing
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

解释:

  • 您的目标是迭代从第 6 个工作表(索引 5)到第 15 个工作表(索引 14)的工作表。记住getSheets()[0]是第一张。

  • 对于每张工作表,您想要获取 range 中值的总和AF3:AF。为了获得总和,我将2D 数组展平为 1D,过滤掉空单元格,然后使用reduce求总和。

  • 最后我们将数据粘贴回工作表Master Sales

解决方案:

function myFunction() {

  const ss = SpreadsheetApp.getActive();

  const sheet1 = ss.getSheetByName('Master Sales');

  const sheets = ss.getSheets().slice(5,15);

  const data = [];

  sheets.forEach( sh => 

  data.push([sh.getRange('AF3:AF').getValues().flat().filter(r=>r!='').reduce((a,b)=>a+b)])

 ); 

  sheet1.getRange(2,39,data.length,1).setValues(data); //AM

}

边注:


在 javascript 中对数组进行切片的正确方法是使用slice:


const sheets = ss.getSheets().slice(5,15);


查看完整回答
反对 回复 2023-07-20
?
森林海

TA贡献2011条经验 获得超2个赞

不完全是一个答案。只是这一行看起来不太好:

var value = sheet.getRange('AF3:AF').getValue();
sheet1.getRange('AM2:AM').setValue(value);

不应该在那里getValues()setValues()不是getValue() setValue()?由于范围包括许多单元格。

getValue()setValue()仅处理范围的一个(第一个)单元格。


查看完整回答
反对 回复 2023-07-20
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信