簡體   English   中英

將行存檔到單獨的工作表 - 谷歌工作表

[英]Archive rows to a separate sheet - google sheets

我有一個腳本,用於根據同一電子表格中的單元格編輯將行歸檔到一個選項卡到另一個選項卡。 然而,工作表的大小變得非常大,導致頁面加載緩慢。 我只是想知道,因為我在腳本方面不太有經驗,是否可以將行“歸檔”到一個完全獨立的谷歌表(新 URL)中。

注意:目前,如果您將第 6 列單元格值更改為“存檔”,它會從一張紙(“內容制作母版”)發送到另一張紙(“內容存檔”)。

請參閱下面的代碼了解我目前的情況 - 任何幫助都會非常有用!

  // assumes source data in sheet named Content Production Master
  // target sheet of move to named Content Archive
  // test column with "Archive" is col6
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Content Production Master" && r.getColumn() == 6 && r.getValue() == "Archive") {
    var row = r.getRow();
    var lastRow = r.getLastRow(); //Save the last edited row index
    var numColumns = s.getLastColumn();
    var numRows = lastRow-row + 1; // Corrected this calculation
    var targetSheet = ss.getSheetByName("Content Archive");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    //s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.getRange(row, 1, numRows, numColumns).moveTo(target); // Take in account the lastRow when archiving the edited range.     
    //s.deleteRow(row);
    for (let i = row; i<=lastRow; i++) {
      s.deleteRow(row);
      console.log(`Deleted row ${row} at pass number ${i}`);
    }
  }
}

由於無法使用move(target)將數據從源工作表移動到不同的電子表格。 您可以使用getValues()setValues(values)手動獲取要移動的數據並將其粘貼到另一個電子表格中。

示例代碼:

function onEdit(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var r = ss.getActiveRange();

  if(s.getName() == "Content Production Master" && r.getColumn() == 6 && r.getValue() == "Archive") {
    //var targetSs = SpreadsheetApp.openById('1xh0huhm7ghGP7Y_5jNSFh7eaNX4iVoOL4SY95IWqpfs');
    var targetSs = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1xh0huhm7ghGP7Y_5jNSFh7eaNX4iVoOL4SY95IWqpfs/edit?resourcekey=0-j6u0gdSEBp-F9SZYlZYi1g#gid=93990300');
    var targetSheet = targetSs.getSheetByName("Content Archive"); 

    var row = r.getRow();
    var lastRow = r.getLastRow(); //Save the last edited row index
    var numColumns = s.getLastColumn();
    var numRows = lastRow-row + 1; // Corrected this calculation
    
    //Get data to be moved
    var data = s.getRange(row, 1, numRows, numColumns).getValues();

    //Paste the values to the target sheet on another spreadsheet
    targetSheet.getRange(targetSheet.getLastRow()+1,1,data.length,data[0].length).setValues(data);

    //Delete data in the source sheet
    s.deleteRows(row, numRows);
  }
  
}

先決條件(使用可安裝的 onEdit 觸發器):

在此處輸入圖片說明

它能做什么?

  1. 檢查修改后的單元格是否在第 6 列中,值為“存檔”。 使用openByUrl(url)openById(id)打開目標電子表格。 然后選擇目標工作表。
  2. 使用getValues()獲取要移動的范圍的行值
  3. 使用setValues(values)將值寫入目標表
  4. 使用deleteRows(rowPosition, howMany)刪除源工作表中的存檔行

輸出:

源表(之前)

在此處輸入圖片說明

源表(之后)

在此處輸入圖片說明

目標表(之后)

在此處輸入圖片說明

暫無
暫無

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

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