У меня есть две таблицы. Я хочу сопоставить колонку C spreadsheet1
со столбцом A spreadsheet2
. Обе эти таблицы имеют записи более 8000. Из-за большого количества записей мой скрипт постоянно дает ошибку exceeded maximum execution time
. Вот сценарийпревысило максимальное время выполнения в google-apps-script
function compare() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheetList1=ss.getSheetByName("spreadsheet1");
var sheetList2=ss.getSheetByName("spreadsheet2");
var sheet1Data=sheetList1.getRange(2,3,sheetList1.getLastRow(),1).getValues();
var sheet2Data=sheetList2.getRange(1,1,sheetList2.getLastRow(),1).getValues();
for (i in sheet2Data){
var row = 2;
for (j in sheet1Data){
if (sheet1Data[j][0]==sheet2Data[i][0]){
sheetList1.getRange("A"+row).setValue('Inactive');
}
row++;
}
}
}
любые предложения для оптимизации этого скрипта. Или как справиться с этой ошибкой? Заранее спасибо :)
EDIT
Спасибо за прекрасный ответ. Есть одна проблема. Если я нажимаю данные в массиве newSheet1Data
перед оператором if
, тогда он записывает Inactive
дважды. т.е., если есть две строки он пишет inactive
в четыре rows.Like
newSheet1Data.push(sheet1Data[j]);
if (sheet1Data[j][2]==sheet2Data[i][0]){
newSheet1Data[j][0]='Inactive';
}
Если я нажимаю данные в if
высказывания и не матча происходит, то он не находит строки и дать эту ошибку TypeError: Cannot set property "0.0" of undefined to "Inactive"
. Вроде бы
if (sheet1Data[j][0]==sheet2Data[i][0]){
newSheet1Data.push(sheet1Data[j]);
newSheet1Data[j][0]='Inactive';
}
жаль, что я сделал опечатку в коде, последняя строка кода спосо: конечно, должны использовать SheetName использовать .getRange() , Я обновил свой ответ. –
Я, наконец, протестировал его, эта версия работает так, как ожидалось, петли не подходят для этой логики. –
Я обновил вопрос, пожалуйста, посмотрите. – Noor