Проблема, с которой вы столкнулись (помимо того, что вы написали код, также немного запутанна) в том, что когда событие вызывается «При редактировании» или «При отправке формы», Объекты события различны для них, поэтому они не будут иметь одинаковых свойств, и вы можете применять те же логики c, что и в коде.
Вот как Редактировать объект Похоже, вот как выглядит Форма отправки Объект .
Зная это. Я изменил ваш код следующим образом:
В вашей основной функции я проверяю причину триггера, если это событие редактирования или отправки, затем в зависимости от события и условий для обоих из них true, я вызываю функции onEditChange
или onSubmitChange
.
function BatteryInspection(e) {
var range = e.range;
var row = range.getRow();
var col = range.getColumn();
var sheet = range.getSheet();
var colToCapitalize = 2;
var sheetName = "FormResponses1";
// Let's see if it is a form or edit object, checking the namedValues properties
if(!e.namedValues){
// Edit event
// Check the right conditions for an edit event
if (sheet.getName() !== sheetName || row < 2 || col !== colToCapitalize || typeof e.value == "object") return;
else onEditChange(e, sheet, row);
} else {
// Submit Event
// Check the right conditions for a submit event
if (sheet.getName() !== sheetName || row < 2 | typeof e.values != "object") return;
else onSubmitChange(e, sheet, row);
}
}
Внутри функций onEditChange
и onSubmitChange
я устанавливаю значения в правой ячейке в верхний регистр, а затем вызываю функция setFormulas
.
// Call when there is an edit event
function onEditChange(evt, sheet, row){
// Uppercase the value where the triggered occured
evt.range.setValue(evt.value.toUpperCase());
setFormulas(sheet, row);
}
// Call when there is an submit event
function onSubmitChange(evt, sheet, row){
// Uppercase the value just in the value of the second col
sheet.getRange(row, 2).setValue(evt.values[1].toUpperCase());
setFormulas(sheet, row);
}
В функции setFormulas
, как видно из названия, я просто установил формулы, которые вы устанавливали ранее, в основной функции BatteryInspection
.
// Function for setting the formulas
// Call whether an edit or submit event happens
function setFormulas(sheet, row){
sheet.getRange(row, 10).setFormula("=SUBSTITUTE(B" + row + ",\" \",\"\")");
var cellcopy = sheet.getRange(row, 10);
var cellvalues = cellcopy.getValues();
sheet.getRange(row, 2).setValues(cellvalues);
cellcopy.clearContent();
sheet.getRange(row, 8).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,2,0)");
sheet.getRange(row, 9).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,3,0)");
}
Весь код теперь будет выглядеть так:
function BatteryInspection(e) {
var range = e.range;
var row = range.getRow();
var col = range.getColumn();
var sheet = range.getSheet();
var colToCapitalize = 2;
var sheetName = "FormResponses1";
// Let's see if it is a form or edit object, checking the namedValues properties
if(!e.namedValues){
// Edit event
// Check the right conditions for an edit event
if (sheet.getName() !== sheetName || row < 2 || col !== colToCapitalize || typeof e.value == "object") return;
else onEditChange(e, sheet, row);
} else {
// Submit Event
// Check the right conditions for a submit event
if (sheet.getName() !== sheetName || row < 2 | typeof e.values != "object") return;
else onSubmitChange(e, sheet, row);
}
}
// Call when there is an edit event
function onEditChange(evt, sheet, row){
// Uppercase the value where the triggered occured
evt.range.setValue(evt.value.toUpperCase());
setFormulas(sheet, row);
}
// Call when there is an submit event
function onSubmitChange(evt, sheet, row){
// Uppercase the value just in the value of the second col
sheet.getRange(row, 2).setValue(evt.values[1].toUpperCase());
setFormulas(sheet, row);
}
// Function for setting the formulas
// Call whether an edit or submit event happens
function setFormulas(sheet, row){
sheet.getRange(row, 10).setFormula("=SUBSTITUTE(B" + row + ",\" \",\"\")");
var cellcopy = sheet.getRange(row, 10);
var cellvalues = cellcopy.getValues();
sheet.getRange(row, 2).setValues(cellvalues);
cellcopy.clearContent();
sheet.getRange(row, 8).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,2,0)");
sheet.getRange(row, 9).setFormula("=VLOOKUP(B" + row + ",LookUpTable!A2:C1001,3,0)");
}
Документы
Для получения дополнительной информации вы также можете проверить: