首页 > 解决方案 > 根据模板从选定的行生成新的电子表格

问题描述

使用此脚本,我可以从电子表格中的所有行生成新选项卡:

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});
    }
  });
}

仅当我选择特定行并将此电子表格重命名为 I 列中单元格中的值时,我才会基于模板选项卡(在本例中为选项卡“xxx”)生成一个新的电子表格(因此不是选项卡)对于相应的行。

怎么做?

标签: google-apps-scriptgoogle-sheets

解决方案


而不是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);
}

推荐阅读