簡體   English   中英

如何將Google Apps腳本應用於整個Google表格電子表格?

[英]How to apply a Google Apps Script to an entire Google Sheets spreadsheet?

我正在嘗試應用一種腳本,該腳本將在整個Google表格電子表格中運行,而不僅僅是一個標簽。 我有多個標簽都使用相同的格式; 我希望腳本查看每個選項卡的F列中的數據驗證,如果為任何行選擇了“不適用”,請將整行的內容移至名為“不適用項”的選項卡

我沒有編寫腳本的經驗,因此我從一個論壇主題中復制了當前正在使用的腳本。 它成功地將行移動到正確的選項卡,但僅適用於指定的活動工作表。 我希望腳本查看整個電子表格,並移動任何標記為“不適用”的行。

我怎樣才能做到這一點? 這是我的代碼:

function onEdit() {
  var sheetNameToWatch = "Floorplan + Calendars";

  var columnNumberToWatch = 5; // column A = 1, B = 2, etc.
  var valueToWatch = "Not Applicable";
  var sheetNameToMoveTheRowTo = "Not Applicable Items";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (
    sheet.getName() == sheetNameToWatch &&
    range.getColumn() == columnNumberToWatch &&
    range.getValue() == valueToWatch
  ) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet
      .getRange(range.getRow(), 1, 1, sheet.getLastColumn())
      .moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }

給定項目中的所有腳本都可以訪問電子表格中的所有工作表。 這就是為什么我們建議您這樣編寫onEdit(e)腳本的原因:

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!="Sheet Name") return;

這限制了腳本對不需要的圖紙執行操作。

但是,在您的情況下,您希望所有表都包含在onEdit(e)函數中,因此這不是必需的。

就個人而言,我不會在onEdit()函數中運行此函數,因為它可能需要30秒以上的時間。 但是您要求的功能是通過以下腳本完成的。 exclA是您不希望在“不適用”搜索中包含的工作表名稱的數組,例如名為“不適用項目”的工作表。

function notApplicable() {
  var ss=SpreadsheetApp.getActive();
  var dsh=ss.getSheetByName('Not Applicable Items')
  var exclA=["Not Applicable Items"];
  var shts=ss.getSheets();
  for(var i=0;i<shts.length;i++) {
    var name=shts[i].getName();
    if (exclA.indexOf(shts[i].getName())==-1) {
      var sh=shts[i];
      var rg=sh.getDataRange();
      var vA=rg.getValues();
      var d=0;
      for(var j=0;j<vA.length;j++) {
        if(vA[j][5]=="Not Applicable") {
          dsh.appendRow(vA[j]);
          sh.deleteRow(j+1-d++)
        }
      }
    }
  }
}

我認為很多用戶都在使用onEdit()功能。

您可以通過以下方式在for循環中獲取每個電子表格

for(var i = 0; i < [number of sheets]; i++){
  sheet = ss.getSheets()[i];

  . . . [rest of the code]
}

並在每個循環中將要嘗試的內容包括在for循環中。

暫無
暫無

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

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