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

我有 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 etc


Error returned is **cannot read property getRange**


Appreciate any help on what I am not seeing

http://img2.mukewang.com/64b89a3f00011c5c04770497.jpg

慕虎7371278
浏览 110回答 2
2回答

慕田峪9158850

解释:您的目标是迭代从第 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);

森林海

不完全是一个答案。只是这一行看起来不太好:var value = sheet.getRange('AF3:AF').getValue(); sheet1.getRange('AM2:AM').setValue(value);不应该在那里getValues()而setValues()不是getValue() setValue()?由于范围包括许多单元格。getValue()并setValue()仅处理范围的一个(第一个)单元格。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript