[英]Google sheets new sheet templating
我正在使用谷歌電子表格。 我希望每個新添加的工作表(當用戶按下左下角的“+”時)都包含一些模板化信息(表格的標題)。 我不是在談論整個文檔模板,我只想為一個文檔制作它。 現在為此目的,我使用帶有模板的特殊工作表並復制它。
雖然您無法創建要從中復制的“模板”工作表,但您可以使用onChange()
觸發器將模板在添加后立即插入到新工作表中。
根據有關Event Objects的文檔,在更改電子表格的結構時生成的事件 object 中存在changeType
值:
changeType更改的類型(
EDIT
、INSERT_ROW
、INSERT_COLUMN
、REMOVE_ROW
、REMOVE_COLUMN
、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());
}
});
}
}
將此腳本插入腳本編輯器后,您需要做的第一件事是運行 function saveSheetNames()
。 這會將當前工作表名稱存儲到腳本的屬性中,以便稍后添加新工作表時,可以確定新工作表。
接下來,您需要設置一個onChange
可安裝觸發器。
按照Edit > Current project's triggers
菜單項,您將在 G Suite Developer Hub 中打開一個新頁面。 點擊右下角的+ Add Trigger
按鈕,設置觸發器設置如下:
onChange
Head
From spreadsheet
On change
然后按保存。
現在,當您在 UI 中使用默認+
按鈕添加新工作表時, onChange()
function 將運行,並將模板工作表復制到新工作表。 這可能需要幾秒鍾,但它會自動完成。
我希望這對你有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.