Я пытаюсь избежать следующего кода, потому что он слишком медленный:
for (var c = 25; c>2; c--){
if (sheet2.getRange(1,c).getValue() == 0)
{sheet2.deleteColumn(c)}
}
Вместо этого я попытался найти список столбцов, которые я хочу удалить из массива, а затем установить массив. (Недавно я выяснил, что удаление строк / столбцов в al oop очень дорого: скрипт Google l oop производительность )
Я нашел это Удаление столбцов данных в javascript массив и попробуйте применить его к моему коду, но он не работает.
Вот код.
var ary = sheet2.getRange(2,1,outData.length+1,outData[0].length).getValues();
var indexesToRemove = [];
for (var c = 25; c>2; c--){
if (sheet2.getRange(1,c).getValue() == 0)
{
indexesToRemove.push(c);
}
}
Часть выше работает хорошо. Что не работает, так это функция удаления столбцов из массива, как только я нашел индексы для удаления. Массив _row - это не то, что я ищу. Что я делаю не так?
removeColumns(ary, indexesToRemove);}
function removeColumns(data, indexes) {
return data.map(function (row) {
// when we remove columns, the indexing gets off by 1 each time, keep track of how many to adjust
var indexAdjustment = 0;
// copy row w/ .slice so we do not modify the original array
var _row = row.slice();
indexes.forEach(function (colIndex) {
// remove column
_row.splice(colIndex - indexAdjustment, 1);
// add 1 to adjustment to account for the column we just removed
indexAdjustment++
});
return _row;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = ss.getSheetByName('Cache');
sheet2.clear();
sheet2.getRange(2,1,_row.length,_row[0].length).setValues(_row);
});
}
Кстати, я тоже пробовал это раньше, но все еще не работает:
var ary = sheet2.getRange(2,1,outData.length+1,outData[0].length).getValues();
for (var c = 25; c>2; c--){
if (sheet2.getRange(1,c).getValue() == 0)
{ ary = ary.map(function(item){
return item.splice(0,c)});
}
}