Google apps script GoogleSheets新表单模板
我正在使用谷歌电子表格。我希望每个新添加的工作表(当用户按下左下角的“+”时)都包含一些模板化信息(表的标题)。我不是说整个文档模板,我只想为一个文档创建一个模板。现在,为了达到这个目的,我使用带有模板的特殊工作表,并将其复制。回答: 虽然无法创建要从中复制的“模板”工作表,但可以使用Google apps script GoogleSheets新表单模板,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在使用谷歌电子表格。我希望每个新添加的工作表(当用户按下左下角的“+”时)都包含一些模板化信息(表的标题)。我不是说整个文档模板,我只想为一个文档创建一个模板。现在,为了达到这个目的,我使用带有模板的特殊工作表,并将其复制。回答: 虽然无法创建要从中复制的“模板”工作表,但可以使用onChange()触发器在添加模板后立即将其插入新工作表 更多信息: 根据上的文档,在电子表格结构更改时生成的事件对象中存在一个changeType值: 变更类型变更类型(编辑,插入行,插入列,删除行,删除列,插
onChange()
触发器在添加模板后立即将其插入新工作表
更多信息:
根据上的文档,在电子表格结构更改时生成的事件对象中存在一个changeType
值:
变更类型变更类型(编辑
,插入行
,插入列
,删除行
,删除列
,插入网格
,删除网格
,格式
,或其他
)
添加新图纸时,INSERT\u GRID
值可用于执行某些代码
代码示例:
对于本例,我将假设您有一个模板工作表,您可以从中复制模板化信息,对于本例,我将假设它被称为template
const ss=SpreadsheetApp.getActiveSpreadsheet();
const templateSheet=ss.getSheetByName(“模板”);
var sheets=ss.getSheets();
函数saveSheetNames(){
var name=sheets.map(x=>x.getName());
PropertiesService.getScriptProperties().setProperty(“工作表”,名称.toString())
}
函数onChange(e){
如果(如changeType==“插入网格”){
var rangeToCopy=templateSheet.getDataRange();
var oldSheets=PropertiesService.getScriptProperties().getProperty(“工作表”).split(“,”);
var name=sheets.map(x=>x.getName());
name.forEach(函数(名称){
if(oldSheets.indexOf(name)=-1){
RangeTopy.copyTo(ss.getSheetByName(name).getRange(1,1,RangeTopy.getNumRows(),RangeTopy.getNumColumns());
PropertiesService.getScriptProperties().setProperty(“sheets”,names.toString());
}
});
}
}
设置:
将此脚本插入脚本编辑器后,首先需要运行函数saveSheetNames()
。这会将当前工作表名称存储到脚本的属性中,以便以后添加新工作表时,可以确定新工作表
接下来,您需要设置一个onChange
可安装触发器
按照Edit>当前项目的触发器
菜单项,您将在G Suite开发者中心打开一个新页面。单击右下角的+添加触发器
按钮,设置触发器设置如下:
- 选择要运行的函数:
onChange
- 选择应运行的部署:
Head
- 从电子表格中选择事件源:
- 选择事件类型:
On change
+
按钮添加新工作表时,将运行onChange()
函数,并将模板工作表复制到新工作表中。这可能需要几秒钟,但会自动完成
我希望这对你有帮助
参考资料: