Создать новую таблицу из выбранной строки на основе шаблона - PullRequest
0 голосов
/ 17 июня 2020

С помощью этого скрипта я могу создать новую вкладку из всей строки в электронной таблице:

function onOpen() {
    SpreadsheetApp.getUi().createMenu('Tab Orari')
        .addItem('Genera Tab Orari', 'createTabs')
        .addToUi()}

function createTabs() {
  var ss = SpreadsheetApp.getActive();
  var templateSheet = ss.getSheetByName('xxx');
  ss.getSheetByName('Generale').getRange('I2:I').getValues().filter(String)
  .forEach(function (sn) {
    if (!ss.getSheetByName(sn[0])) {
      ss.insertSheet(sn[0], ss.getSheets().length, {template: templateSheet});
    }
  });
}

Я бы сгенерировал новую электронную таблицу (а значит, не вкладку) на основе вкладки шаблона (в данном случае вкладка «xxx») только тогда, когда я выбираю конкретную строку c и переименовываю эту электронную таблицу как значение в ячейке в столбце I для соответствующей строки.

Как сделать сделать это?

1 Ответ

1 голос
/ 17 июня 2020

Вместо insertSheet используйте copyTo(spreadsheet)

Имя электронной таблицы можно получить, получив номер строки выбранной ячейки и найдя запись в столбце 9 («I» ) этой строки.

Пример:

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Tab Orari')
  .addItem('Genera spreadsheet', 'createSpreadsheet')
  .addToUi()}

function createSpreadsheet() {
  var ss = SpreadsheetApp.getActive();
  // the following line means that the function will search for the spreadsheet name in the active sheet, no matter which one it is
  var sheet = ss.getActiveSheet();
  //the selected row
  var row = sheet.getActiveCell().getRow();
  // column 9 corresponds to "I"
  var name = sheet.getRange(row, 9).getValue();
  var templateSheet = ss.getSheetByName('xxx');
  var newSpreadsheet = SpreadsheetApp.create(name);
  templateSheet.copyTo(newSpreadsheet);
}
...