我的原始电子表格包含一个网站的价格。然后,我运行脚本来更改格式,并创建网站需要的一些新列。这些输入均基于原始电子表格。
例如;原始文件具有“标题”,而生成的电子表格具有“标题”和“ 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++;
}
答案 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())