簡體   English   中英

谷歌表格新表格模板

[英]Google sheets new sheet templating

我正在使用谷歌電子表格。 我希望每個新添加的工作表(當用戶按下左下角的“+”時)都包含一些模板化信息(表格的標題)。 我不是在談論整個文檔模板,我只想為一個文檔制作它。 現在為此目的,我使用帶有模板的特殊工作表並復制它。

回答:

雖然您無法創建要從中復制的“模板”工作表,但您可以使用onChange()觸發器將模板在添加后立即插入到新工作表中。

更多信息:

根據有關Event Objects的文檔,在更改電子表格的結構時生成的事件 object 中存在changeType值:

changeType更改的類型( EDITINSERT_ROWINSERT_COLUMNREMOVE_ROWREMOVE_COLUMNINSERT_GRIDREMOVE_GRIDFORMATOTHER )。

添加新工作表時, 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按鈕,設置觸發器設置如下:

  • 選擇要運行的 function: onChange
  • 選擇應該運行的部署: Head
  • Select 事件源: From spreadsheet
  • Select 事件類型: On change

然后按保存。

現在,當您在 UI 中使用默認+按鈕添加新工作表時, onChange() function 將運行,並將模板工作表復制到新工作表。 這可能需要幾秒鍾,但它會自動完成。

我希望這對你有幫助!

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM