Я работал над этим несколько дней и перевернул Интернет и эти форумы вверх ногами, но нигде не могу найти ответ.Я изучил некоторые сценарии на этом пути, но решил, что то, что мне нужно сделать, это далеко за пределами моих возможностей.Любая помощь или руководство будет СУПЕР хорошо принят !!
Я настраиваю систему листов заказов для «бизнеса» моей и моей жены ручной работы (проект).По сути, мне нужно переместить заказ 1 (столбцы aw) из «готово к отправке», когда «выполнено» введено в столбец X, в следующую пустую строку в «отправлено», исключив формулы в столбцах wz. Поэтому при проверке на наличиепустая строка, она должна проверять только столбцы aw.
Это означает, что после того, как информация о заказе переместилась на новый лист, в эти столбцы добавлена дополнительная функциональность (я подключил ее, чтобы отправить электронное письмо с извинениями,если заказ опоздает - надеюсь, что нет, но лучше быть готовым с нашей почтовой службой :))
Пример листа здесь.
Изначально я научился какнапишите 'переместить строку, если значение добавлено в столбец x - и узнал о триггерах и о том, как вызывать листы и т. д.
Затем, поскольку в столбцах x, y и z есть формулы, я либо в конечном итоге удаляю их, когдапереместить всю строку - не круто. Или я получаю (если я перемещаю только столбцы a-w) новую (перемещенную) строку, отображающуюся в строке 9 миллионов, потому что она видит формулы как не пустые строки.Я редактировал сценарий «найти строку на основе столбца», который, казалось, работал нормально, но затем я попытался соединить их вместе, и тогда он взорвался.
Может кто-нибудь сказать мне, где я здесь не так?
function lastRowForColumn(sheet, column){
// Get the last row with data for the whole sheet.
var ss = spreadSheetApp.getActiveSpreadSheet();// this gets you the
active spreadsheet in which you are working
var sheet = ss.getSheetByName('Sent');
var r = event.source.getActiveRange();
var data = sheet.getRange(1, "A", numRows).getValues();
var numRows = sheet.getLastRow();
// Iterate backwards and find first non empty cell
for(var i = data.length - 1 ; i >= 0 ; i--){
if (data[i][0] != null && data[i][0] != ""){
return i + 1;
var ss = spreadSheetApp.getActiveSpreadSheet();// this gets you the
active spreadsheet in which you are working
var sheet = ss.getSheetByName('Sent');
var r = event.source.getActiveRange();
if(s.getName() == "Ready To Send" && r.getColumn() == 25 &&
r.getValue() == "Sent") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Sent");
var lastRow = lastRowForColumn();
var target = targetSheet.getRange(targetSheet, i, 1);
s.getRange(row, 1, 1, 10).moveTo(target);
s.deleteRow(row);
}
}
}
}