0

只是想知道是否有人可以给我一些关于用二维数组(内存)替换/覆盖电子表格上的列的更直接方法的指示。

目前,下面的代码通过“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]); 
      }
    }
4

1 回答 1

0

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

执行大量读取和写入非常慢,尽可能将它们分组为一次读取和一次写入。

于 2013-05-16T15:38:27.757 回答