Я хочу скопировать некоторые данные из электронной таблицы в другую.Первый часто изменяется по размеру, а второй имеет несколько столбцов от первого, а затем некоторые другие столбцы с собственными данными.
Я бы хотел вставить / удалить строки во второй, в зависимости от того, какие строки были вставлены или удалены в первой.Они должны соответствовать предыдущим данным.
Я пытался использовать триггер onChange, чтобы определить, когда был обнаружен INSERT_ROW или REMOVE_ROW changeType.Он отлично работает, когда вставляется только строка, но не когда вставляется более одной строки.Кроме того, когда они вставляют строку и после отмены, действие changeType имеет значение EDIT, а не REMOVE_ROW.Сбой.
Затем я решил добавить скрытый столбец с порядковым номером в каждой строке, поэтому, если между строками 5 и 6 есть промежуток чисел, это означает, что мне нужно вставить 3 строки во второй листпосле 5-й строки я перестраиваю индекс, чтобы проверить дальнейшие изменения ... Он также работает, если было удалено несколько строк.
Этот способ работал нормально, пока я не понял, что пользователи могут дублировать строки илископируйте / вставьте полную строку, а затем измените данные с новой информацией, НО индекс также копируется, и когда я проверяю разницу, чтобы проверить, была ли удалена какая-либо строка, происходит сбой.
Первая попытка:
if (event.changeType == 'INSERT_ROW' && tab =='Hoja 1') {
for (var i = 0 ; i < indexes.length ; i++) {
if (indexes[i] =='') {
destSheet.insertRowAfter(i+1);
}
}
}
if (event.changeType == 'REMOVE_ROW' && tab =='Hoja 1') {
for (var i = 0 ; i < indexes.length ; i++) {
if (indexes[i]-indexes[i+1] < -1 && indexes[i] != 0) {
if (indexes[i] != lastRow) {
destSheet.deleteRows(i+3,(indexes[i]-indexes[i+1])*-1-1)
}
}
}
}
for (var j = 0; j < lastRow-1; j++) {
indexs.getCell(j+1, 1).setValue(j+1);
}
}
Вторая попытка:
function checkLines (sheet, destSheet) {
for (var i = 0 ; i < indexes.length ; i++) {
if (indexes[i] =='') {
destSheet.insertRowAfter(i+1);
}
if (indexes[i]-indexes[i+1] < -1 && indexes[i] != 0) {
if (indexes[i] != lastRow) {
destSheet.deleteRows(i+3,(indexes[i]-indexes[i+1])*-1-1)
}
}
}
}
Я хотел бы получить копию выбранных столбцов исходного листа на листе назначения, и если первый из них меняет свои строки, то долженпроизойдет во втором.
В некоторых случаях пункт назначения не актуализируется, а затем информация, записанная в следующем столбце, не совпадает с информацией файлапервые столбцы.
Вот ссылка на пример исходного листа: https://docs.google.com/spreadsheets/d/19OnwKIEm2OFymjsjqeoQYWcA9BNAJTM0ap2rdpQlZoQ/edit?usp=sharing
А вот пункт назначения: https://docs.google.com/spreadsheets/d/10vbMIqQE1miNfuJXQ1f_MSJnVs9MJrAOcg5_ZrAPWP8/edit?usp=sharing
Буду признателен за любое предложение... И, пожалуйста, дайте мне знать, если вам нужны дальнейшие объяснения ... английский не мой родной язык, и я не уверен, что вы понимаете мою проблему.
Большое спасибо.
V.