循环循环行,获取值,然后在另一个纸上添加到总计



,所以我在Google表中被困在此。

表"价格计算器"的数量在A中购买和出售的物品,分为2个名为ranges trade_qty和buy_qty。

同一列表出现在"主tally"的表格中,以及以前的交易的数量,也出现在A。

已经翻过多个代码示例的窗口,似乎没有一个能够提供任何有效的东西。

function TEST() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
 //Gets number of rows of each range
 var Rows1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getNumRows()
 var Rows2 = ss.getRange(''PRICE CALCULATOR'!BUY_QTY').getNumRows()
 //Gets Starting rows of each range
 var Row1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getRow()
 var Row2 = ss.getRange(''PRICE CALCULATOR'!BUY_QTY').getRow()
    for (r=Row1; r<Rows1; r++) {
    ss.setActiveSheet(ss.getSheetByName('PRICE CALCULATOR'), true);
    var ADD = ss.getRange(r,1).getValue()
    if (cell.isBlank()) {
      next r
    }
    else {
    ss.setActiveSheet(ss.getSheetByName('Master Tally'), true);
    var EXIST = ss.getRange(r,1).getValue()
    var TOT = ADD+EXIST
    ss.getRange(r,1).setValue(TOT)
    }
  }
}

基本上,我尝试开发一个宏观/脚本,该宏/脚本将"价格计算器"中的新交易QTY添加到" Master Tally"

中的现有QTY中

i" M stump陷入困境,因为它不断扔我'找不到方法getrange(数字,编号(',现在我不再深处!

链接到文档;https://docs.google.com/spreadsheets/d/1gijcqv5kt41wyujs1hs1hs1x8ypputpy_kgotuilzxlkso/edit?usp = sharing

此代码遭受基本缺陷:行数和列之间的混淆(在0-Zero中启动(与从脚本命令(例如 getValue(衍生的代码(在1始于1开始( - 一个(。

例如:

  • for (r=Row1; r<Rows1; r++) {
    在这种情况下,ROW1的值由getRow确定,因此返回实际行号。但是循环值将生成零以零的数组的行和列号。因此,这条线应读取for (r=0; r<Rows1; r++) {

  • var EXIST = ss.getRange(r,1).getValue()
    该行的目的是返回" Master Tally'中的现有QTY",并且该范围将在A列中查看该值。但是,这些值实际上是在B列中。因此,此行将永远不会返回"现有QTY"的准确值。

还有其他一些事情要注意:

  1. 现有代码在每个循环中进行两个getValue调用;这些是耗时的。答案通过仅在循环之前获得相应的范围值来提高性能。
  2. 售出数量的更新(setValue(TOT)(在循环内部。同样,这是一个廉价的命令。答案更新循环中的数组值,然后在循环后一次更新表。
  3. BUY Qty值是无关的

function so56017521() {
  var ss = SpreadsheetApp.getActive();
  //Gets number of rows of each range
  var Rows1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getNumRows()
  //Logger.log("DEBUG: Number of Rows: Trade Qty="+Rows1);
  //Gets Starting rows of each range
  var Row1 = ss.getRange(''PRICE CALCULATOR'!TRADE_QTY').getRow()
  //Logger.log("DEBUG: Start Row: Trade Qty="+Row1);
  // setup sheets
  var calcsheet = "PRICE CALCULATOR";
  var mastersheet = "Master Tally";
  var calc = ss.getSheetByName(calcsheet);
  var master = ss.getSheetByName(mastersheet);
  var masterrows = master.getLastRow();
  //Logger.log("DEBUG: Master Last Row = "+masterrows);
  // get data for each sheet
  var calcrange = calc.getRange(Row1, 1, Rows1);
  var calcdata = calcrange.getValues();
  var masterrange = master.getRange(3, 2, masterrows - 2);
  var masterdata = masterrange.getValues();
  //Logger.log("DEBUG: Calc data range = "+calcrange.getA1Notation()+", Master Data Range"+masterrange.getA1Notation());
  for (r = 0; r < Rows1; r++) {
    Logger.log("r=" + r);
    var ADD = calcdata[r][0]; //Trade qty
    //Logger.log("DEBUG: r="+r+", ADD value = "+ADD+", ADD.length = "+ADD.toString().length);
    if (ADD.toString().length != 0) { // if Trade qty has value
      // keep going
      //Logger.log("DEBUG: keep going");
      var EXIST = masterdata[r][0]; // existing quantity qty sold
      Logger.log("DEBUG: r=" + r + ", EXIST = " + EXIST);
      var TOT = ADD + EXIST; // sum of trade-in qty plus existing qty
      Logger.log("DEBUG: ADD+EXIST = " + TOT);
      // update masterdata array
      masterdata[r][0] = TOT;
    } else {
      // nothing to see here
      //Logger.log("DEBUG: next r please");
    }
  }
  //update the spreadsheet with the adjusted array values
  masterrange.setValues(masterdata);
}

最新更新