gpt4 book ai didi

google-apps-script - 如何在创建时设置工作表的行数和列数? (还有关于Google的 “advanced parameters”的字词)

转载 作者:行者123 更新时间:2023-12-04 13:22:37 24 4
gpt4 key购买 nike

从头创建电子表格时,Google的SpreadsheetApp允许您指定该电子表格的行数和列数:

var spreadsheet = SpreadsheetApp.create(name, rows, columns);

这仅适用于新创建的电子表格中的第一张工作表。

我需要做的就是在现有电子表格中插入新工作表时复制此行为。显然,没有明确的方法可以做到这一点。

唯一的线索是创建新表的函数
var sheet = spreadsheet.insertSheet(options);

(可选)采用这个神秘的参数 options,除了 here之外,其他任何地方都没有描述过,其中谷歌声明可以使用此“高级参数”对象来复制模板中的图纸。

似乎在其他任何地方都没有关于该对象的文档。此处仅提及用于图纸创建的这些高级参数。

总结一下,这些问题是:
  • 如何以编程方式设置新工作表的的数量,这些代码是在现有电子表格内部创建的,而无需通过编程方式创建和克隆其他电子表格或使用模板等。
  • 那些高级参数是什么?我真的很想阅读有关这些的任何文档:如果它们存在,它们甚至可能对某些事情有用! (或至少可用...)
  • 最佳答案

    有了您施加的限制(“依此类推”),就不可能回答您的问题。选项是从具有所需所有工作表的模板电子表格开始,克隆电子表格中已有的工作表,或添加新工作表,然后将其展开或修剪为所需的大小。
    实用功能
    假设可以使用最后一个选项,这是一个实用程序函数,可以处理多种方法来插入新工作表。

    /**
    * Wrapper for Spreadsheet.insertSheet() method to support customization.
    * All parameters are optional & positional.
    *
    * @param {String} sheetName Name of new sheet (defaults to "Sheet #")
    * @param {Number} sheetIndex Position for new sheet (default 0 means "end")
    * @param {Number} rows Vertical dimension of new sheet (default 0 means "system default", 1000)
    * @param {Number} columns Horizontal dimension of new sheet (default 0 means "system default", 26)
    * @param {String} template Name of existing sheet to copy (default "" means none)
    *
    * @returns {Sheet} Sheet object for chaining.
    */
    function insertSheet( sheetName, sheetIndex, rows, columns, template ) {

    // Check parameters, set defaults
    var ss = SpreadsheetApp.getActive();
    var numSheets = ss.getSheets().length;
    sheetIndex = sheetIndex || (numSheets + 1);
    sheetName = sheetName || "Sheet " + sheetIndex;
    var options = template ? { 'template' : ss.getSheetByName(template) } : {};

    // Will throw an exception if sheetName already exists
    var newSheet = ss.insertSheet(sheetName, sheetIndex, options);

    if (rows !== 0) {
    // Adjust dimension: rows
    var newSheetRows = newSheet.getMaxRows();

    if (rows < newSheetRows) {
    // trim rows
    newSheet.deleteRows(rows+1, newSheetRows-rows);
    }
    else if (rows > newSheetRows) {
    // add rows
    newSheet.insertRowsAfter(newSheetRows, rows-newSheetRows);
    }
    }

    if (columns !== 0) {
    // Adjust dimension: columns
    var newSheetColumns = newSheet.getMaxColumns();

    if (columns < newSheetColumns) {
    // trim rows
    newSheet.deleteColumns(columns+1, newSheetColumns-columns);
    }
    else if (columns > newSheetColumns) {
    // add rows
    newSheet.insertColumnsAfter(newSheetColumns,columns-newSheetColumns);
    }
    }

    // Return new Sheet object
    return newSheet;
    }
    范例与表现
    您对性能下降表示关注;以下是单个场景的“执行成绩单”中的一些观察结果。调整尺寸所需的时间不会明显多于插入默认图纸的时间。
    插入默认工作表:
    insertSheet();
    该脚本不超过200毫秒(大部分只是 Spreadsheet.insertSheet()):
    [15-11-18 15:56:25:365 EST] Starting execution
    [15-11-18 15:56:25:369 EST] SpreadsheetApp.getActive() [0 seconds]
    [15-11-18 15:56:25:390 EST] Spreadsheet.getSheets() [0.02 seconds]
    [15-11-18 15:56:25:544 EST] Spreadsheet.insertSheet([Sheet 2, 2, {}]) [0.153 seconds]
    [15-11-18 15:56:25:565 EST] Sheet.getMaxRows() [0.02 seconds]
    [15-11-18 15:56:25:565 EST] Sheet.getMaxColumns() [0 seconds]
    [15-11-18 15:56:25:597 EST] Execution succeeded [0.196 seconds total runtime]
    在具有10行10列(小于默认值)的特定索引处插入工作表:
    insertSheet("New sheet",1, 10, 10);
    这大约需要325毫秒:
    [15-11-18 15:59:54:476 EST] Starting execution
    [15-11-18 15:59:54:481 EST] SpreadsheetApp.getActive() [0 seconds]
    [15-11-18 15:59:54:520 EST] Spreadsheet.getSheets() [0.038 seconds]
    [15-11-18 15:59:54:595 EST] Spreadsheet.insertSheet([New sheet, 1, {}]) [0.075 seconds]
    [15-11-18 15:59:54:629 EST] Sheet.getMaxRows() [0.033 seconds]
    [15-11-18 15:59:54:699 EST] Sheet.deleteRows([11, 990]) [0.069 seconds]
    [15-11-18 15:59:54:746 EST] Sheet.getMaxColumns() [0.046 seconds]
    [15-11-18 15:59:54:809 EST] Sheet.deleteColumns([11, 16]) [0.062 seconds]
    [15-11-18 15:59:54:810 EST] Execution succeeded [0.329 seconds total runtime]
    最后,在具有2000行和52列(均为默认值的两次)的特定索引处插入工作表:
    insertSheet("Big Sheet",1, 2000, 52);
    大约需要240毫秒:
    [15-11-18 16:09:36:393 EST] Starting execution
    [15-11-18 16:09:36:398 EST] SpreadsheetApp.getActive() [0 seconds]
    [15-11-18 16:09:36:419 EST] Spreadsheet.getSheets() [0.02 seconds]
    [15-11-18 16:09:36:491 EST] Spreadsheet.insertSheet([Big Sheet, 1, {}]) [0.071 seconds]
    [15-11-18 16:09:36:518 EST] Sheet.getMaxRows() [0.027 seconds]
    [15-11-18 16:09:36:563 EST] Sheet.insertRowsAfter([1000, 1000]) [0.044 seconds]
    [15-11-18 16:09:36:585 EST] Sheet.getMaxColumns() [0.021 seconds]
    [15-11-18 16:09:36:645 EST] Sheet.insertColumnsAfter([26, 26]) [0.059 seconds]
    [15-11-18 16:09:36:646 EST] Execution succeeded [0.247 seconds total runtime]

    关于google-apps-script - 如何在创建时设置工作表的行数和列数? (还有关于Google的 “advanced parameters”的字词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787057/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com