Эта функция работает построчно и удаляет строки, если строка в столбце B не равна serverinputvalue или если значение в столбце D меньше minscorevalue
.
проблема в том, что он работает очень медленно. Есть ли способ ускорить это?
function readRows() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var serverinputvalue= SpreadsheetApp.getActive().getSheetByName('Instructions').getRange('C13').getValue();
var minscoreinputvalue = SpreadsheetApp.getActive().getSheetByName('Instructions').getRange('C17').getValue();
var rowsDeleted = 0;
for (var i = 1; i <= numRows - 1; i++) {
var row = values[i];
if (row[1] != serverinputvalue || row[3] < minscoreinputvalue) {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}
};
Я прочитал этот источник https://yagisanatode.com/2019/06/12/google-apps-script-delete-rows-based-on-a-columns-cell-value-in-google-sheet в котором упоминается метод ускорения аналогичной функции, но, если быть на 100% честным, я не совсем понимаю, как это реализовать.
Попробуй это:
function readRows() {
const ss = SpreadsheetApp.getActive();
var C13= ss.getSheetByName('Instructions').getRange('C13').getValue();
var C17 = ss.getSheetByName('Instructions').getRange('C17').getValue();
var sh = ss.getActiveSheet();
var rg = sh.getRange(2,1,sh.getLastRow() - 1, sh.getLastColumn());
var vs = rg.getValues().filter(r => {if(r[1] == C13 && r[3] >= C17) return true});
rg.clearContent();
sh.getRange(2,1,vs.length,vs[0].length).setValues(vs);
}
О, да. Я не знал, был ли это заголовок. Я изменил его.
Этот скрипт изменяет способ отображения данных в некоторых ячейках. Ячейка со значением 02476 становится 2476. Также пустая ячейка становится 0. Есть ли способ предотвратить это?
нужен конкретный пример
Что ж, когда вы запускаете ее в листах Google и первое число в одной из ячеек в диапазоне равно 0 (может быть любая ячейка, не обязательно те, для которых мы выполняем логику), эта формула отбрасывает 0… скажем, у вас есть [ 02345, 192.168.1.1, 15000, 20:00] после запуска этого сценария, который становится [2345, 192.168.1.1, Калифорния, 20:00]. Обратите внимание на изменение позиции [0]
Эй, Купер, просто хотел обновить это, потому что ваш код оказался очень полезным и на случай, если кто-нибудь наткнется на него. Решение для getValues setValues, из-за которого такие значения, как «01234», становятся «1234», было решено путем первого форматирования этого столбца в обычный текст с помощью .setNumberFormat('@').
Отлично! большое большое спасибо. Это в 10 раз быстрее или больше. Однако он удаляет мой заголовок, есть ли способ сохранить содержимое первой строки?