Перенос данных из текущего активного листа в другой по URL-адресу

Я пытаюсь передать данные из одного Google Sheet: enter image description here


Данные перенесены на другой лист по 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 шт):

Автор решения: oshliaer

Самое главное, 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]);
    }
  }
}
→ Ссылка