只是想知道是否有人可以给我一些更直接的方法来指示更换/覆盖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]);
}
}
答案 0 :(得分:0)
使用range.setvalues()参见https://developers.google.com/apps-script/reference/spreadsheet/range#setValues(Object)
执行大量读写操作非常慢,在可能的情况下将它们分组为单个读取和单个写入。