Создайте новую электронную таблицу и скопируйте ячейки Specifi c всякий раз, когда вставляется новая строка - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть:

  • Лист Google, который автоматически получает новые заказы на покупку через zapier
  • Заказы вставляются в виде новых строк
  • Код ниже, это простой триггер с привязкой к контейнеру, доступ к которому можно получить, перейдя в Инструменты> Редактор сценариев на странице Google

Я хочу:

  • Для создания новой электронной таблицы всякий раз, когда строка вставлена ​​в исходную электронную таблицу ЭТА ЧАСТЬ РАБОТАЕТ
  • Для копирования указанной c информации из исходной электронной таблицы в новую электронную таблицу ЭТА ЧАСТЬ НЕ РАБОТАЕТ

Первоначально я использовал getActiveSpreadsheet для получения переменной sourceSpreadsheet и подумал, что, возможно, активная электронная таблица изменилась после того, как я создал новую электронную таблицу. Чтобы попытаться это исправить, я использовал openByID вместо getActiveSpreadsheet, но функция все еще не работает. Любая помощь будет высоко ценится!

// Function will run automatically on a change to the spreadsheet by looking at the event object, or e
function onChange(e){ 

// Look in the log to see what type of change is represented by the event
 Logger.log(e.changeType);

// Only run the rest of the function if the type of change represented by the event object is an inserted row 
 if(e.changeType=='INSERT_ROW'){

// Get the current spreadsheet that is the source 
 var sourceSpreadsheet = SpreadsheetApp.openById('File ID');

// Get the first sheet of the current spreadsheet (0 indexed)   
 var sourceSheet = sourceSpreadsheet.getSheets()[0];

// Get the last row of the sheet that has data in it
 var lastrow = sourceSheet.getLastRow();

// Get the value on the last row, for 3 different columns
 var sourceRange1 = sourceSheet.getRange(lastrow, 1).getValues();

 var sourceRange2 = sourceSheet.getRange(lastrow, 2).getValues();  

 var sourceRange3 = sourceSheet.getRange(lastrow, 3).getValues();

// Create new destination spreadsheet
 var newSpreadsheet = SpreadsheetApp.create("My New File Name"); 

// Get the first sheet of the new spreadsheet (0 indexed)   
 var newSheet = newSpreadsheet.getSheets()[0];

// Set destination range to put data to
 var newRange = newSpreadsheet.getRange(1,1).setValues(sourceRange1)

 var newRange2 = newSpreadsheet.getRange(1,2).setValues(sourceRange2)

 var newRange3 = newSpreadsheet.getRange(1,3).setValues(sourceRange3)

}

}

1 Ответ

2 голосов
/ 02 апреля 2020

Изменение

var newRange = newSpreadsheet.getRange(1,1).setValues(sourceRange1);

на

var newRange = newSheet.getRange(1,1).setValues(sourceRange1);

должно решить вашу проблему.


Код также можно оптимизировать для:

function onChange(e){ 

  Logger.log(e.changeType);

  if(e.changeType=='INSERT_ROW'){
    var sourceSpreadsheet = SpreadsheetApp.openById('File ID');
    var sourceSheet = sourceSpreadsheet.getSheets()[0];

    var newSpreadsheet = SpreadsheetApp.create("My New File Name"); 
    var newSheet = newSpreadsheet.getSheets()[0];

    var lastrow = sourceSheet.getLastRow();

    var sourceRange = sourceSheet.getRange(lastrow, 1, 1, 3).getValues();

    newSheet.getRange(1,1,1,3).setValues(sourceRange);

    }

}

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...