У вас есть лист "чек выпущен", который берет значения из "листа" Журнал ". Ваша цель - ввести" дату выпуска "в" чеке выпущен "и обновить его до" Журнал ", а затем отразить в" чеке "Освобожден ". Подход, который вы выбрали, состоял в том, чтобы отредактировать фактическое связанное значение" дата выпуска "для" выпущенного чека ". Неудивительно, что это не удалось, поскольку он просто брал дату из" Журнала ". следующий код:
- Я использовал вспомогательный столбец в «чек выпущен», где можно ввести дату.
- Сценарий onEdit (e) обнаруживает новое значение, находит эквивалентстрока в «Журнале».
- Сценарий обновляет столбец «Дата» в «Журнале» - в этот момент значения в «проверке освобождены» автоматически обновляются.
- Затем скрипт удаляетзначение в столбце помощника.
Соответствие от "Журнал" до "проверка освобождена"
Соответствие строк из "проверка освобождена" в "Журнал"опирается на несколько элементов:
- Нет recoУ rd действительно уникальный идентификатор.
- Однако значения номеров заданий, чертежей и счетов-фактур, когда каждое из них преобразуется в строку и объединяются, генерируют уникальное значение, которое можно использовать для сравнения значений из «Журнал» и «проверка деблокирования».
- Значения в «Журнале» обрабатываются в цикле для создания одномерного массива объединенных значений.
- Объекты событий предоставляют отредактированную строку в «проверке освобожден»;и значения Job, Draw и Invoice в этой строке объединяются.
- Используя метод Javascript indexOf , сценарий "находит" строку в "Log", которая соответствует уникальному объединенному значению изотредактированный ряд.
Другие примечания:
- фактический размер диапазона данных в «Журнале» и «проверке снят» определяется с помощью
getlastRow()
getRange
и getValues
запускаются по одному разу для «Журнал» и «Выпуск проверен» - Значения имен переменных выбраны в соответствии с их назначением;это помогает в чтении и понимании кода.
function onEdit(e) {
// 5824330602
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ui = SpreadsheetApp.getUi();
var logsheet = "Log";
var log = ss.getSheetByName(logsheet);
var checkrsheet = "check released";
var checkr = ss.getSheetByName(checkrsheet);
// get Log data
var logFR = 2;
var logLR = log.getLastRow();
var logLC = 4;
var logRange = log.getRange(logFR,1,logLR-logFR+1,logLC);
// Logger.log(logRange.getA1Notation());// DEBUG
var logValues = logRange.getValues();
// get check released data
var checkrRange = checkr.getRange(logFR,1,logLR-logFR+1,logLC);
//Logger.log(checkrRange.getA1Notation());
var checkrValues = checkrRange.getValues();
// build array of uniquelogitems
var logitems=[];
for (var i=0; i<logValues.length; i++) {
var logjob = logValues[i][0].toString();
var logdraw = logValues[i][1].toString();
var loginv = logValues[i][2].toString();
var logid = logjob+logdraw+loginv;
//Logger.log("DEBUG: LOG: Job= "+logjob);
//Logger.log("DEBUG: LOG: draw= "+logdraw);
//Logger.log("DEBUG: LOG: inv= "+loginv);
//Logger.log("DEBUG: LOG: concat= "+logid);
var logid = logjob+logdraw+loginv;
logitems.push(logid);
}
//Logger.log(logitems); //DEBUG
// get the event objects
var editedRow = e.range.getRow();
var editedCol = e.range.getColumn();
var editedSheet = e.range.getSheet().getSheetName();
var editedValue = e.value;
// Logger.log("DEBUG: row = "+editedRow+", column = "+editedCol+", Sheet = "+editedSheet)
// apply logic to test whether this edit should be processed
// Column 5 ("E") is the helper column
if(editedRow >= logFR && editedRow <=logLR && editedCol === 5 && editedSheet === checkrsheet){
// the edit is in Column E (Date), between the first and last rows of data, on the "check released" sheet
//Logger.log("DEBUG: edit is OK. edit row = "+editedRow+". Keep processing");
var checkrjob = checkrValues[editedRow-2][0].toString();
var checkrdraw = checkrValues[editedRow-2][1].toString();
var checkrinv = checkrValues[editedRow-2][2].toString();
var checkritem = checkrjob+checkrdraw+checkrinv;
//Logger.log("DEBUG: Checkr: job="+checkrjob+", draw= "+checkrdraw+", inv = "+checkrinv+", Item = "+checkritem);
var match = logitems.indexOf(checkritem);
//Logger.log("DEBUG: Matching row = "+match);
// get the existing date
var existingdate = logValues[+match+1][3];
var cell = log.getRange(+match+2,4);
//Logger.log("DEBUG: the update cell = "+cell.getA1Notation())
// date field is a date, so update new date
cell.setValue(editedValue);
cell.setNumberFormat('mm/dd/yy');
e.range.clearContent();
//Logger.log("DEBUG: updated date on Log")
}
else{
// the edit didn't meet the rule
//Logger.log("DEBUG: edit did NOT meet criteria. Do not proceed")
}
};
Столбец E - вспомогательный столбец
![Screenshot](https://i.stack.imgur.com/obYEm.jpg)