Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script GoogleSheets新表单模板_Google Apps Script_Google Sheets - Fatal编程技术网

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
然后按save

现在,当您在UI中使用默认的
+
按钮添加新工作表时,将运行
onChange()
函数,并将模板工作表复制到新工作表中。这可能需要几秒钟,但会自动完成

我希望这对你有帮助

参考资料:

我认为如果使用脚本复制文档模板会更容易,因此默认情况下,新工作表将包含模板信息。您认为如何?例如,您可以创建一个宏按钮,当您单击它时,它将根据提供的模板自动生成一个新的工作表。你会喜欢吗?@MariosKaramanis是的,我会喜欢,如果我找不到内置“+”按钮,我一定会这么做。请与我们共享此模板的屏幕截图?如果我们不知道模板是什么样子,我们如何为您构建它?