У меня есть приведенный ниже сценарий, который регистрирует записи, сделанные в столбце 4 на листе с именем «Проверка почтового индекса», и помещает их на лист с именем «app_search_logs».
Я хочу добавить дополнительные критерии, по которым скрипт также будет регистрировать записи, сделанные в столбцах 10,11,12,13 и 14 листа «Проверка почтового индекса», и помещать их в лист под названием «PUB_search_logs». Я пробовал несколько разных вещей, но не могу заставить его работать должным образом с внесенными изменениями.
Как я могу заставить это делать то, что я хочу?
function onEdit(e) {
if (!e) {
throw new Error(
'Please do not run the onEdit(e) function in the script editor window. '
+ 'It runs automatically when you hand edit the spreadsheet.'
);
}
logColumns_(e);
}
/**
* Automatically logs changes in columnsToWatch in sheetsToWatch.
*
* @param {Object} e The onEdit() event object.
*/
function logColumns_(e) {
// version 1.2, written by --Hyde, 10 February 2022
// - see https://support.google.com/docs/thread/150138311
// version 1.1, written by --Hyde, 30 July 2014
// - see https://productforums.google.com/d/topic/docs/7CaJ_nYfLnM/discussion
// version 1.0, written by --Hyde, 10 August 2013
// - see https://productforums.google.com/d/topic/docs/az365_ypIV0
if (!e.value) {
return;
}
////////////////////////////////
// [START modifiable parameters]
const parameters = [
{
sheetsToWatch: /^(Postcode Checker)$/i,
columnsToWatch: [4],
changelogSheetName: 'app_search_logs',
},
];
// [END modifiable parameters]
////////////////////////////////
const sheet = e.range.getSheet();
const sheetName = sheet.getName();
const settings = parameters.filter(setting => sheetName.match(setting.sheetsToWatch))[0];
if (!settings || !settings.columnsToWatch.includes(e.range.columnStart) || sheetName === settings.changelogSheetName) {
return;
}
const columnLabel = sheet.getRange(sheet.getFrozenRows() || 1, e.range.columnStart).getValue();
const rowLabel = sheet.getRange(e.range.rowStart, sheet.getFrozenColumns() || 1).getValue();
let changelogSheet = e.source.getSheetByName(settings.changelogSheetName);
if (!changelogSheet) {
changelogSheet = e.source
.insertSheet(settings.changelogSheetName, e.source.getNumSheets())
.appendRow(['Timestamp', 'Sheet name', 'Cell address', 'Column label', 'Row label', 'Value entered']);
changelogSheet.setFrozenRows(1);
}
changelogSheet.appendRow([new Date(), e.value]);
Чтобы дать вам представление, вы можете попробовать следующее. Из скрипта выше, вместо последней строки
changelogSheet.appendRow([new Date(), e.value]);
Я добавил:
const pubSearchLogShet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PUB_search_logs");
const col = e.range.getColumn();
if (col == 4){
changelogSheet.appendRow([new Date(), e.value])
}
else if (col == 10 ||col == 11 ||col == 12 ||col == 13 ||col == 14){
pubSearchLogShet.appendRow([new Date(), e.value])
}
}
Я также изменил columnsToWatch
в paramaters
:
const parameters = [
{
sheetsToWatch: /^(Postcode Checker)$/i,
columnsToWatch: [4,10,11,12,13,14],
changelogSheetName: 'app_search_logs'
},
];