该脚本有效,但仅适用于有限的行数

时间:2019-07-01 11:59:27

标签: google-apps-script google-sheets

我的原始电子表格包含一个网站的价格。然后,我运行脚本来更改格式,并创建网站需要的一些新列。这些输入均基于原始电子表格。

例如;原始文件具有“标题”,而生成的电子表格具有“标题”和“ SEO标题”。该脚本只会在两列中复制“ title”的内容,如果SEO太长,则会对其进行修剪。

我想编辑脚本,以便根据简单的计算为我提供一个具有替代价格的新列(AS2):名为“ price”(F2)* 1.18的列。

该脚本非常适合有限的行数。我首先添加一列“网站RRP”。然后,在该列中,所有值都应具有将“价格”列乘以1.18的结果。

但是一旦我拥有超过2 / 3,000行,该过程就会超时。

我不确定如何使我的代码更简单以减少处理时间。

ss.getRange("AS2").setFormula("=F2*1.18");
var lr = ss.getLastRow();
var fillDownRange = ss.getRange(2, 45, lr-1);
ss.getRange("AS2").copyTo(fillDownRange);

如果F2为1.00,我希望AS2的输出为1.18,F8000和AS8000的输出相同。但是脚本超时了。

我从以下代码开始定义列

var ss=SpreadsheetApp.getActiveSpreadsheet();
var shSKU=ss.getActiveSheet();
var skuData=shSKU.getDataRange().getValues();

var finalData=[];
var i,j;
finalData[0]=[];
for(i=0;i<skuData[0].length;i++)
finalData[0].push(skuData[0][i]);   

finalData[0].push("Website RRP"); 

然后我将数据放入数组

for(j=0;j<skuData[i].length;j++)
{
  finalData[count].push(skuData[i][j]);
}

var arr=strip_html_tags(skuData[i][23]);
finalData[count].push(skuData[i][2]);
finalData[count].push(arr[0]);
finalData[count].push(arr[1]);
finalData[count].push("");
finalData[count].push("");
count++;
}

1 个答案:

答案 0 :(得分:0)

根据您的问题,不清楚“ AS2”是您的列名还是引用单元格AS2(列AS,行2) 。无论如何ss.getRange("AS2")setFormula("=F2*1.18");无法为整个脚本工作。您需要创建一个循环,该循环遍历列AS的所有单元格并将公式应用于它们。请检查以下代码:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = ss.getLastRow();
  for(var i = 2; i < lr; i++) {
   var destination ="AS"+i;
   var formula = "F" + i + "*1.18";
   ss.getRange(destination).setFormula(formula);
  }
}
As for:
var fillDownRange = ss.getRange(2, 45, lr - 1);
ss.getRange("AS2").copyTo(fillDownRange);

如果要复制AS的值而不是公式(这意味着AR * 1.18),则必须替换

ss.getRange("AS2").copyTo(fillDownRange);

作者

fillDownRange.setValues(ss.getRange("AS2:AS").getValues())