簡體   English   中英

Google Script - 無法從一張紙復制到另一張紙

[英]Google Script - Unable to copy from one sheet to another

這是我的第一個谷歌腳本,我來自 VBA 背景,所以我可能錯過了一些明顯的東西。 我試圖從一張紙復制到另一張紙,有些在 VBA 中很簡單,但我正在努力解決它,我不明白我錯過了什么

下面的代碼我雖然會將一張紙中的范圍復制到另一張紙上。 不是整個范圍,只是其中的一部分,每個OnEdit()只有 1 行

我使用targetSheet.getRange(targetSheet.get1stNonEmptyRowFromBottom(1) + 1, 1,1,numColumns-1).activate();檢查了我想要從中復制和復制到的范圍targetSheet.getRange(targetSheet.get1stNonEmptyRowFromBottom(1) + 1, 1,1,numColumns-1).activate(); & sheet.getRange(row, 1, 1, numColumns-1).activate(); 它選擇了我期望的范圍

目前執行也沒有顯示任何失敗

function onEdit(e) {
  
  //This is sheet we will be copied to 
  const VALUE = ["LEAD","LANDSCAPE"];
  //This is the column for the check box
  const COLUMN_NUMBER = 25
  //The main sheet that is being copied from
  const MAIN_SHEET = 'Form Responses 1'

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var cell = sheet.getActiveCell();
  var row = cell.getRow();
  var lead_or_landscape = sheet.getRange(row,20).getValue();

  //This is so we dont run this by mistake on another cell edit or sheet
  if((COLUMN_NUMBER == cell.getColumn() && MAIN_SHEET == sheet.getName && cell.isChecked() == true) 
  && (lead_or_landscape == VALUE[0] || lead_or_landscape == VALUE[1])){
    
    //copies row from current sheet to the specificed sheet (Lead or landscape)
    var numColumns = sheet.getLastColumn();
    var targetSheet = spreadsheet.getSheetByName(lead_or_landscape);
    var target = targetSheet.getRange(targetSheet.get1stNonEmptyRowFromBottom(1) + 1, 1,1,numColumns-1);
    sheet.getRange(row, 1, 1, numColumns-1).copyTo(target());
  }
}

Object.prototype.get1stNonEmptyRowFromBottom = function (columnNumber, offsetRow = 1) {
  const search = this.getRange(offsetRow, columnNumber, this.getMaxRows()).createTextFinder(".").useRegularExpression(true).findPrevious();
  return search ? search.getRow() : offsetRow;
};

我剛剛快速瀏覽了您的代碼,您確定這一行嗎?

sheet.getRange(row, 1, 1, numColumns-1).copyTo(target());

它不應該是

sheet.getRange(row, 1, 1, numColumns-1).copyTo(target);

您必須在sheet.getName()使用括號,而不是在copyTo(target () )

並且您可以使用sheet.appendRow()方法代替 copyTo() 方法,這樣更容易。

function onEdit(e) {
  
  //This is sheet we will be copied to 
  const sheets = ["LEAD","LANDSCAPE"];
  //This is the column for the check box
  const colNumber = 25;
  //The main sheet that is being copied from
  const mainSheet = 'Form Responses 1';

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();
  var cell = sheet.getActiveCell();
  var row = cell.getRow();
  var leadOrLandscape = sheet.getRange(row,20).getValue();

  //This is so we dont run this by mistake on another cell edit or sheet
  if(colNumber == cell.getColumn() 
     && mainSheet == sheet.getName() 
     && cell.isChecked() == true 
     && sheets.includes(leadOrLandscape)){
    
    //copies row from current sheet to the specificed sheet (Lead or landscape)
    var numColumns = sheet.getLastColumn();
    var targetSheet = spreadsheet.getSheetByName(leadOrLandscape);
    targetSheet.appendRow(sheet.getRange(row, 1, 1, numColumns-1).getValues()[0])
    
  }
}

暫無
暫無

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

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