рассмотрите эту ситуацию.
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("2:2");
var values = range.getValues();
values[0][0] = "updated value"; //updating retrieved data
sheet.insertRowAfter(1); //here the problem appears
range.setValues(values); //trying to save updated row data - FAIL!
Обновленные значения строк будут записаны в строке № 2 (в соответствии с селектором диапазона «2: 2»), а не в новой позиции «3: 3».Результат: он перезапишет данные в строке 2 вместо обновления ранее выбранной / загруженной строки, которая теперь находится в позиции «3: 3», а не в позиции «2: 2».
Я ищу способ каксохранить «адрес» диапазона, даже когда диапазон был смещен из-за добавления / удаления строк / ячеек где-то еще на листе.
В этом фиктивном примере я могу отслеживать изменения диапазона.Но при параллельной обработке / обновлении листа я не могу просто отслеживать все изменения из разных мест.
До сих пор я придумал решение добавить новые строки только в конце SS (это не меняет диапазоналюбых строк выше, но я хотел бы иметь возможность добавлять новые строки поверх листа, не влияя на уже выбранные диапазоны. Удаление строк также опасная ситуация - это также меняет положение диапазонов.
LockService не может реальноРешите ситуацию, потому что у меня есть много сценариев, работающих на одном листе (не использую централизованную библиотеку из-за высокой производительности в аддоне).
Метаданные для ячейки или строки кажутся слишком сложными для такой простой задачи.
С моей точки зрения, Range объекта должен сохранять свою позицию, даже когда он перемещается / перемещается куда-то еще, в противном случае я не вижу причины иметь Range в качестве объекта - если он сохраняет только фиксированную информацию о том, откуда онвыбрал. Любые советы приветствуются. Заранее спасибо ..
РЕДАКТИРОВАТЬ:
Просто чтобы добавить контекст.Я использую листы Google в качестве базы данных для заказов (пока 10 тысяч) - каждая строка означает один заказ (клиент), и не все заказы находятся на одном листе - разные продукты имеют разные листы (+ - 10 продуктов / листов)
Существует предложение использовать именованные диапазоны для решения этой проблемы - так что же произойдет, если электронная таблица будет иметь десять тысяч именованных диапазонов - может ли это работать без серьезных проблем с производительностью?Я подумываю о создании именованного диапазона для каждой строки заказа, чтобы я мог легко подобрать правую строку по OrderId и не бояться перемещения строки, когда новый заказ поступает во время обработки другого