Google电子表格脚本 - 将数组转储到工作表的更直接方式?

时间:2013-05-16 10:39:51

标签: google-apps-script google-spreadsheet-api

只是想知道是否有人可以给我一些更直接的方法来指示更换/覆盖SpreadSheet上的列与2D数组(内存)中的列。

目前,下面的代码通过“for”循环逐行向下滚动将值写入单元格。这很好,但是现在这个工作表已超过7k行,这个脚本有接近执行时间限制。

将整个工作表保存到内存数组并进行计算的过程花费的时间很少,这是for循环,它逐个单元地调用单元格,这似乎是永远的。

必须有一种更直接的方法来替换整个列,而不是逐列向下滚动列以更新值。

任何指针都会非常感激,请原谅我的无知,我只是非常擅长编写脚本。

此致 中号

   function UnitPrice() {
      var range = Stocklist.getRange(1, 1, LastRow, LastColumn).getValues();  

      for (var i=1; i < (LastRow); i++){
        var PurposeArray = range[i][PurposeCol-1]; 
        var ListedArray = range[i][ListedCol-1];
        var QtyArray = range[i][QtyCol-1];
        var CostArray = range[i][Cost$Col-1];
        var Unit$Array = range[i][Unit$Col-1]; 
        var PremiumArray = range[i][PremiumCol-1];

        if (QtyArray!="0" && QtyArray!=""){
          range[i][Unit$Col-1] = CostArray*(1+PremiumArray)/QtyArray;
        } else{
          range[i][Unit$Col-1] = "";
        } 

        if (ListedArray!=""&&PurposeArray=="" ){           
            range[i][PurposeCol-1] = "Stock";
        }
      }


      //update spreadsheet's column "Unit$Col" with values from column 25 of 'range' array.
      for (var j=1; j < LastRow; j++){
        Stocklist.getRange(j+1, Unit$Col).setValue(range[j][Unit$Col-1]);
        Stocklist.getRange(j+1, PurposeCol).setValue(range[j][PurposeCol-1]); 
      }
    }

1 个答案:

答案 0 :(得分:0)

使用range.setvalues()参见https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object)

执行大量读写操作非常慢,在可能的情况下将它们分组为单个读取和单个写入。