如何替换完整 Google 电子表格中的文本



我尝试制作一个替换值的脚本(例如 1 到 x(。这是我的脚本:

function myOwnReplaceTest(){
var ss = SpreadsheetApp.getActiveSheet();
var sheet = ss.getName();
for (var r = 1; r <= ss.getLastRow(); ++r) {
for (var c = 1; c <= ss.getLastColumn(); ++c) {
var sr = ss.getRange(r, c).getValue();
var re = sr.toString().replace(1,'x');
ss.getRange(r, c).setValue(re);
}
}
}

它工作正常,但在更大的列表中非常非常慢(例如 1000 行和 10 列(。

当我测试有关"STRG+H"的相同功能时,它会在 5 秒内工作。

有没有人给我一个提示,如何让我的脚本更快?

提前谢谢。

根据我评论的文章,以下内容应该更快,因为它只写一次。我不得不重写循环以使我的索引很好地匹配。

function myOwnReplaceTest(){
var ss = SpreadsheetApp.getActiveSheet();
var sheet = ss.getName();
var newVals = new Array(ss.getLastRow());

for (var r = 0; r < ss.getLastRow(); r++) {
newVals[r]=new Array(ss.getLastColumn()-1);
for (var c = 0; c < ss.getLastColumn(); c++) {
var sr = ss.getRange(r+1, c+1).getValue();
var re = sr.toString().replace(1,'x');
newVals[r][c]=re;
//ss.getRange(r, c).setValue(re);
}
}
//Browser.msgBox(newVals);
ss.getRange(1,1,newVals.length,newVals[0].length).setValues(newVals);
}

据推测,也可以通过将数据读取到数组中来进一步增强它。 编辑:这是看起来像什么。

function myOwnReplaceTest(){
var ss = SpreadsheetApp.getActiveSheet();
var sheet = ss.getName();
var newVals = new Array(ss.getLastRow());
var allSr = ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn());
//Browser.msgBox(allSr.getValues());

for (var r = 0; r < ss.getLastRow(); r++) {
newVals[r]=new Array(ss.getLastColumn()-1);
for (var c = 0; c < ss.getLastColumn(); c++) {
//var sr = ss.getRange(r+1, c+1).getValue();
var sr = allSr.getCell(r+1, c+1).getValue();
var re = sr.toString().replace(1,'x');
newVals[r][c]=re;
//ss.getRange(r, c).setValue(re);
}
}
//Browser.msgBox(newVals);
ss.getRange(1,1,newVals.length,newVals[0].length).setValues(newVals);
}

我希望这将进一步加快速度。另一个调整可能是不要调用getLastColumn((这么多次,但我想这不是一个大因素。这里的关键是内部 for 循环中的所有操作现在都在内存中。

最新更新