google-apps-script - 根据模板从选定的行生成新的电子表格
问题描述
使用此脚本,我可以从电子表格中的所有行生成新选项卡:
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”)生成一个新的电子表格(因此不是选项卡)对于相应的行。
怎么做?
解决方案
而不是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);
}
推荐阅读
- swift - Swift 从 paymentContextDidChange 获取 stripeId
- socket.io - 如何防止 websocket 打开握手超时?
- java - Java或C#的TFF文件内部信息提取
- html - 根据从表单发布信息的函数的结果激活单独的函数
- javascript - Javascript如何在单击时更改按钮的颜色?
- intellij-idea - Intellij 如何在资源包文件中添加和保存属性?
- json - 如何使用 console.log JSON 过滤?
- excel - 如果现有字符串的长度为 4,则添加字符串
- three.js - glTF模型中的错误剪辑 - AFrame
- bash - Bash:基于命令的特定退出代码的条件