簡體   English   中英

帶有選定列腳本的 Google 表格單獨的日志頁面

[英]Google sheet separate log page with sellected columns script

我有一個谷歌表格問題。 我的主頁(名稱為“MAIN”,從其他工作表中收集數據。因此,“MAIN”工作表如下所示: MAIN

我想創建一個單獨的日志頁面,當有人更改他的酒店時,它只收集“主要”工作表數據,在他的名字旁邊。 (酒店欄在 MAIN 表的第 4 位)

..所以“LogSheet”需要收集帶有時間戳的第 1 秒和第 4 列。

所以最后會有一個列表(誰去了,哪家酒店和什么時候)。 它需要是這樣的, LogSheet ,但我寫不出來:/

function onEdit(e) {
  
  var sheetsToWatch = ["MAIN"];
  var changelogSheetName = ["LogSheet"];

  var timestamp = new Date();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var sheetName = sheet.getName();
  
  if(col === 4 && row > 1 && e.source.sheetsToWatch() .getName() === "MAIN" ){
  e.changelogSheetName().getRange('MAIN', row,1).setValue(new Date());
  }   

 }

關於事件對象和變量的使用存在一些混淆

  1. 變量(包括數組)在沒有()的情況下被調用 - ()保留用於函數調用
  2. 如果您的變量僅包含一個值,而不是數組 - 則無需將其放在[]括號中。 []括號將變量指定為數組,並且需要以不同的方式處理。
  3. 要驗證工作表是否包含在工作表名稱數組中,您需要使用例如indexOf()而不是==
  4. e.source返回進行編輯的電子表格。 在查詢e.source.getActiveSheet()時,您將在大多數情況下正確獲得進行編輯的工作表,但考慮到例外情況,最好將事件 object range與方法https://developers 一起使用。 google.com/apps-script/reference/spreadsheet/range#getsheet
  5. 方法getRange()需要行、列以及可選的行和列號 - 而不是工作表名稱作為變量。

請查看以下示例中的修改。

帶有工作表數組的示例

function onEdit(e) {
  
  var sheetsToWatch = ["MAIN", "add another sheet if desired" ];
  var changelogSheetName = "LogSheet";
  var logSheet = SpreadsheetApp.getActive().getSheetByName(changelogSheetName);
  var timestamp = new Date();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var sheet = e.range.getSheet();
  var sheetName = sheet.getName();
  Logger.log(e.range.getSheet().getName());
  if(col === 4 && row > 1 && sheetsToWatch.indexOf(sheetName)!=-1){
    logSheet.getRange(row,1).setValue(new Date());
    //do whatever else you want
  }     
}

以單張紙作為變量的樣本

function onEdit(e) {
  
  var sheetsToWatch = "MAIN";
  var changelogSheetName = "LogSheet";
  var logSheet = SpreadsheetApp.getActive().getSheetByName(changelogSheetName);
  var timestamp = new Date();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var sheet = e.range.getSheet();
  var sheetName = sheet.getName();
  Logger.log(e.range.getSheet().getName());
  if(col === 4 && row > 1 && sheetsToWatch ==sheetName){
    logSheet.getRange(row,1).setValue(new Date());
    //do whatever else you want
  }     
}

請參閱 Apps 腳本文檔指南以獲得更好的理解。

更新

對於您的情況,最方便的是從已編輯的行中檢索值,並按所需的順序將 append 檢索到LogSheet

樣本

function onEdit(e) {
  
  var sheetsToWatch = "MAIN";
  var changelogSheetName = "LogSheet";
  var logSheet = SpreadsheetApp.getActive().getSheetByName(changelogSheetName);
  var timestamp = new Date();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var sheet = e.range.getSheet();
  var sheetName = sheet.getName();
  if(col === 4 && row > 1 && sheetsToWatch ==sheetName){
    var values = sheet.getRange(row,1,1,4).getValues()[0];
    logSheet.appendRow([new Date(), values[0], values[1], values[3]]);
  }     
}

暫無
暫無

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

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