电子表格的谷歌脚本非常慢



我不是专业人士,但我的电子表格需要这个谷歌脚本。我正在寻找拼图来构建我的代码。最后它可以工作,但非常慢。有人可以帮助我吗?我可以在慢动作中看到代码是如何工作的。:-(

我的电子表格或工作表有很多条目,但有些行是空的(超过 1000 行)。使用过滤功能,我可以非常快速地隐藏这些行,只需几秒钟。我不是电子表格的用户,而是创建者。普通用户实际上不是专家,使用过滤器功能对他们来说是一个挑战。我想我可以在一个脚本中组合所有步骤,并使其可以通过按钮使用。一部分是隐藏空行。

脚本检查第 N 列中是否存在 1 或 0。如果有 0,则应隐藏该行。脚本从第 7 行开始,直到 1150 年。隐藏一行需要一秒钟!这真的是慢动作。如果我的代码是垃圾,是否可以通过脚本激活过滤器功能?

function hideRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName("Order"));
var sheet = SpreadsheetApp.getActiveSheet();
var column = 14;
var cell = 0;
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
for (var row = 7; row < lastRow; row++) {
cell = sheet.getRange(row, column).getValues();
if (cell == 0){
sheet.hideRows(row);
}
else {
sheet.showRows(row);
}
} 
}

试试这个:

function hideRows() 
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet1').activate();
var rg=sh.getDataRange();
var vA=rg.getValues();
for (var i=6;i<vA.length-1;i++)//vA.length-1 stops before last row i=6 is row 7
{
if (vA[i][13] == 0)
{
sh.hideRows(i+1);
}
else 
{
sh.showRows(i+1);
}
} 
}

数组索引比行号和列号少一个,所以你必须保持直线,但你一次获得所有数据,然后循环运行得更快,因为你读取数组而不必访问每个值的电子表格。

getValues()方法返回一个 2D 数组,因此您应该改用getValue(),它返回目标单元格的内容。我重写了您发布的代码片段以获得更好的语法/格式,因为通过 2D 数组递增比通过单元格/范围递增要快得多:

function hideRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Order"); //get sheet
var nRows = sheet.getLastRow() - 7; //# of rows to search
var values = sheet.getRange(7, 14, nRows, 1).getValues(); //Get 2D array of values [[],[],...]
//increment through the full index range of values (0-7)
for (var i in values) {
if (values[i][0] == 0) sheet.hideRows(i+7); //i+7 is the rowIndex (7-14)
else sheet.showRows(i+7);
}
}

这应该完成您要做的事情。如果您有任何问题或疑问,请告诉我。

相关内容

最新更新