如何解决Google覆盖新工作表模板 答案:更多信息:代码示例:设置:参考文献:
我正在使用Google电子表格。我希望每个新添加的工作表(当用户按下左下角的“ +”号时)都包含一些模板化信息(表格标题)。我不是在谈论整个文档模板,我只想为一个文档制作模板。现在,出于这个目的,我使用带有模板的特殊工作表,然后将其复制。
解决方法
答案:
虽然您无法创建要复制的“模板”工作表,但可以使用onChange()
触发器将模板添加到新工作表后,立即将其插入。
更多信息:
根据Event Objects上的文档,在更改电子表格结构时生成的事件对象中存在一个changeType
值:
changeType 更改的类型(
EDIT
,INSERT_ROW
,INSERT_COLUMN
,REMOVE_ROW
,REMOVE_COLUMN
,{{1} },INSERT_GRID
,REMOVE_GRID
或FORMAT
)。
添加新表后,OTHER
值可用于执行一些代码。
代码示例:
在此示例中,我假设您有一个模板工作表,您可以从中复制模板信息,在本示例中,我假设它被称为INSERT_GRID
。
Template
设置:
将此脚本插入脚本编辑器后,您需要做的第一件事就是运行函数const ss = SpreadsheetApp.getActiveSpreadsheet();
const templateSheet = ss.getSheetByName("Template");
var sheets = ss.getSheets();
function saveSheetNames() {
var names = sheets.map(x => x.getName());
PropertiesService.getScriptProperties().setProperty("sheets",names.toString())
}
function onChange(e) {
if (e.changeType == "INSERT_GRID") {
var rangeToCopy = templateSheet.getDataRange();
var oldSheets = PropertiesService.getScriptProperties().getProperty("sheets").split(",");
var names = sheets.map(x => x.getName());
names.forEach(function(name) {
if (oldSheets.indexOf(name) == -1) {
rangeToCopy.copyTo(ss.getSheetByName(name).getRange(1,1,rangeToCopy.getNumRows(),rangeToCopy.getNumColumns()));
PropertiesService.getScriptProperties().setProperty("sheets",names.toString());
}
});
}
}
。这样会将当前工作表名称存储到脚本的属性中,以便以后添加新工作表时可以确定新工作表。
下一步,您需要设置一个saveSheetNames()
可安装触发器。
遵循onChange
菜单项,您将在G Suite开发人员中心中打开一个新页面。单击右下角的Edit > Current project's triggers
按钮,然后按以下步骤设置触发设置:
- 选择要运行的功能:
+ Add Trigger
- 选择应运行的部署:
onChange
- 选择事件源:
Head
- 选择事件类型:
From spreadsheet
然后按保存。
现在,当使用UI中的默认On change
按钮添加新工作表时,+
函数将运行,并将模板工作表复制到新工作表中。可能要花几秒钟,但会自动完成。
我希望这对您有帮助!
参考文献:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。