Перенос данных из текущего активного листа в другой по URL-адресу
Я пытаюсь передать данные из одного Google Sheet:

Данные перенесены на другой лист по URL-адресу https://docs.google.com/spreadsheets/d/1gFuY2i50Vxdl5kx7iHZAupILAW2u35KYSRzCKKXMWIk/edit#gid=0
Данные (конкретная строка) передаются по триггеру события Edit и проверяют, не является ли строка A пустой и является ли строка F «Problem Case». Если A не пусто и F является проблемным случаем, данные из текущей строки на текущем листе копируются на другой лист.
Я беру определенные столбцы из текущего листа: Name, Date, Time, City, Status и некоторые конкретные ячейки в G столбце и копирую их на другой лист. Я беру только ту строку, в которой произошло редактирование.
Код:
function onEdit(e) {
try {
var sheet = e.source.getSheetByName('Daily report');
if (!sheet || e.range.columnStart < 6 || e.range.columnStart > 6) {
return;
}
var ui = SpreadsheetApp.getUi();
var title = "Message Box";
// Получаем данные из редактируемой строки
var row = e.range.rowStart;
var valueA = sheet.getRange('A' + row).getValue();
var valueF = sheet.getRange('F' + row).getValue();
// Проверяем, что строка C не пустая и значение в столбце G равно "Проблемный кейс"
if (valueA !== '' && valueF === 'Problem Case') {
// Получаем данные для записи в другой документ
var dataToSave = [
sheet.getRange('A' + row).getValue(),
sheet.getRange('B' + row).getValue(),
sheet.getRange('C' + row).getValue(),
sheet.getRange('D' + row).getValue(),
sheet.getRange('E' + row).getValue(),
sheet.getRange('F' + row).getValue(),
sheet.getRange('G3').getValue(),
sheet.getRange('G4').getValue(),
sheet.getRange('G5').getValue()
];
ui.alert(title, "TEST", ui.ButtonSet.OK);
var targetURL = "https://docs.google.com/spreadsheets/d/1gFuY2i50Vxdl5kx7iHZAupILAW2u35KYSRzCKKXMWIk/edit#gid=0";
var targetDoc = SpreadsheetApp.openByUrl(targetURL);
var targetList = targetDoc.getSheetByName("Sheet1");
targetList.getRange(1, 1, dataToSave.length, dataToSave[0].length).setValues([dataToSave]);
}
} catch (error) {
// Лог ошибки
Logger.log('Error: ' + error.toString());
}
}
Если столбец F редактируется, он проверяет критерии и копирует данные. Событие Edit срабатывает и копирует данные в массив: dataToSave . Но когда я пытаюсь определить другой документ и лист в сценарии, возникает проблема. Данные не передаются на другой лист. Но массив dataToSave при редактировании заполняется соответствующими данными.
Я предоставил доступ к редактированию по ссылке для целевого документа. Я предоставил скрипту разрешения на редактирование моих таблиц Google. Но в любом случае ничего не происходит.
SourceSheet (источник) доступен по: SourceSheet DestinationSheet (целевая таблица) доступна по: DestinationSheet
Ответы (1 шт):
Самое главное, onEdit - это не триггер, это зарегистрированная функция для простого триггера события Edit.
Чтобы это работало, вам нужно создать свою функцию и установить ее как функцию вызова триггера события Edit.
function triggerOnEdit(e) {
const dataSheet = e.range.getSheet();
if (dataSheet.getName() == 'Daily report' && e.value === 'Problem Case' && e.range.columnStart === 6) {
const values = dataSheet.getRange(e.range.rowStart, 1, 1, 6).getValues()[0];
if (values[0] !== '') {
values.push(['G3', 'G4', 'G5']);
const targetBook = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1gFuY2i50Vxdl5kx7iHZAupILAW2u35KYSRzCKKXMWIk/edit#gid=0");
const targetSheet = targetBook.getSheetByName("Sheet1");
targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, values.length).setValues([values]);
}
}
}