Я хотел бы просто использовать это в комментарии, но это слишком запутано там. Поэтому я напишу ответ вместо этого.
onEdit(e)
срабатывает только при редактировании диапазона, а e
- это редактируемый диапазон. Так что, если вы вставите данные, вы будете вызывать onEdit(e)
, где e
- ваш пункт назначения, а диапазон источника навсегда «забыт». Используя onEdit(e)
, невозможно узнать, что вы сделали, прежде чем запускать его. Следовательно, вы не можете ничего записать в свой журнал до того, как onEdit(e)
запустил .. в этом случае диапазон, в который вы скопировали данные.
Вот небольшой трюк, чтобы сделать то, что вам нужно: копировать и вставлять, используя скрипт. Напишите функцию с чем-то вроде этого
for(i = r;i < r + numRow ;i++) {
if (sheet.getRange("A" + i) matches filter) {// assume that you filter your data based on column A
copy data to destination
write source to log
}
}
и затем назначьте эту функцию где-нибудь на вашем листе.
Каждый раз, когда вам нужно выполнить свою работу, вам нужно только запустить свою функцию.
Хотя есть и другой способ добиться того, чего вы хотите, это записать номер строки в одном столбце с помощью =ARRAYFORMULA(ROW(A1:A1000))
, а когда вы копируете данные, тоже скопируйте этот столбец, тогда вы можете обработать это значение как будто вы работаете с номером строки в вашем коде. Ну, это неаккуратно, и вам, возможно, придется время от времени редактировать формулу, когда ваш лист расширяется более чем на 1000 строк ... вот почему я не рекомендую его. Но если вы можете предсказать, сколько строк хорошо для вашего листа, я думаю, что все в порядке ..