【问题标题】:How to store value in an array during looping and then sum them all using GAS?如何在循环期间将值存储在数组中,然后使用 GAS 将它们全部相加?
【发布时间】:2021-01-04 03:28:49
【问题描述】:

您好,有帮助的贡献者,
我有一个应该在下面执行的循环:

  1. 从第 13 列到第 18 列迭代每个列
  2. 获取每个列中的值(数量)
  3. 每个数量必须乘以来自另一个 gsheet 的重量值才能得到总重量。
  4. 应将每个列的总重量相加得到总重量。

我被困在第 4 步。下面是我的代码:-

const itemsheet=SpreadsheetApp.openById("1c0-vzYQA_9KVHuSYiKHG-3iBBGhTg3EcCZBm7rZDIpM").getSheetByName('item');
const datasheet=SpreadsheetApp.openById("1c0-vzYQA_9KVHuSYiKHG-3iBBGhTg3EcCZBm7rZDIpM").getSheetByName('data');

function weightcalculator() {
  
  const lrow=datasheet.getLastRow();
  const lastrow=itemsheet.getLastRow();
  
  for(var i=13;i<13+(lrow-1);i++){
    const qtyheader=itemsheet.getRange(1,i).getValue();
    const qty=itemsheet.getRange(lastrow,i).getValue();
    const item=getItem(qtyheader); //
    const data=datasheet.getDataRange().getValues();
    const itemrow=data.findIndex(itemID=> {return itemID[2] == item}) +1;
    const weightval=datasheet.getRange(itemrow,7).getValue();
    const weight=weightval*qty;
   
  } 
}

我不知道如何在每次循环后保持每个总重量,然后总结所有。下面的屏幕截图是每列中带有数量值的主 gsheet“项目”。
下面是另一个 gsheet“数据”的屏幕截图,它被称为获取单位重量。

【问题讨论】:

  • 来自另一个 gsheet 你是说另一个标签吗?

标签: javascript arrays google-apps-script


【解决方案1】:

解决方案:

您可以将每个权重推入一个weight 数组,然后对该数组的元素求和。

这是计算总重量的一种方法:

const ss = SpreadsheetApp.openById("1c0-vzYQA_9KVHuSYiKHG-3iBBGhTg3EcCZBm7rZDIpM")
const itemsheet=ss.getSheetByName('item');
const datasheet=ss.getSheetByName('data');

function weightcalculator() {
  
  const lrow=datasheet.getLastRow();
  const lastrow=itemsheet.getLastRow();
  
  const weight = [];
  
  for(var i=13;i<13+(lrow-1);i++){
    const qtyheader=itemsheet.getRange(1,i).getValue();
    const qty=itemsheet.getRange(lastrow,i).getValue();
    const item=getItem(qtyheader); //
    const data=datasheet.getDataRange().getValues();
    const itemrow=data.findIndex(itemID=> {return itemID[2] == item}) +1;
    const weightval=datasheet.getRange(itemrow,7).getValue();
    weight.push(weightval*qty);
   
  } 
  const total_weight = weight.reduce((a, b) => a + b, 0);
  }

参考资料:

Array.prototype.reduce()

【讨论】:

  • 非常感谢@Marios。您的代码效果很好!如果对您来说不是那么麻烦,只是想了解您在闭合花括号之前的最后一行代码的含义是什么,请?将来我可能需要将其应用于其他数据范围。TQ
  • @dell 很高兴它成功了!请在此处查看第一个示例:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2022-06-28
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多