簡體   English   中英

從最后一行復制特定的列數據並粘貼到另一個工作表

[英]Copy specific Columns data from Last Row and paste to another sheet

我試圖從“總計”工作表中最后一行的特定列復制/獲取數據,並將它們傳遞給另一個名為“vnSheet”的工作表。 我之前發現的下面的代碼工作正常。 但是,它復制了母表中的所有行和列數據,我不希望發生這種情況。

function copySheet() {
  var sourceSheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Total");
  var destSheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("vnSheet");
  var columns_to_be_copied = ['A', 'B', 'D', 'F'];
  var columns_to_be_pasted = ['A', 'B', 'D', 'F'];

 for (column in columns_to_be_copied) {

  var copy_range_string = columns_to_be_copied[column] + ':' + columns_to_be_copied[column];
  var paste_range_string = columns_to_be_pasted[column] + ':' + columns_to_be_pasted[column];

  var source = sourceSheet.getRange(copy_range_string);
  var destination  = destSheet.getRange(paste_range_string);
 source.copyTo(destination, {contentsOnly:true});
 }
}

在這里,我只想從“總計”的最后一行復制'A', 'B', 'D', 'F' (除了 'C' 和 'E' )列數據並將這些數據粘貼到相同的列中“vnSheet”但在最后一行 我幾乎搜索了整個互聯網,沒有找到解決我的問題的方法,我發現的所有內容都與上面的代碼類似。

由於我是新手,我的編碼經驗有限,但我是 gd 學習者 :) 任何解決該問題的幫助將不勝感激。 謝謝

在 for 循環之前使用sourceSheet.getLastRow()獲取“總計”表中最后一行的行號,然后在每個列字母后添加此值。

假設您將上述結果分配給lastRow ,那么您可以這樣使用此變量:

var copy_range_string = columns_to_be_copied[column] + lastRow + ':' + columns_to_be_copied[column] + lastRow;

筆記:

閱讀https://developers.google.com/apps-script/guides/support/best-practices可能會對您有所幫助。 本文建議避免調用 Google Apps Script 類,因為它們很慢。 減少調用次數的一種方法確實可以達到您正在查看的結果,因為它允許使用getRangeList一次獲取多個范圍。 另一種方法是使用高級表格服務,因為它允許進行批量更新。

所以有幾件事

  • 據我所知,您目前沒有得到最后一行
  • 您當前有重復的變量來保存相同的數組
  • 您當前正在復制整行,這不是您想要的

假設Target Sheet C 列和 E 列中已經有值,有幾種方法可以解決問題:

  1. 您從Target Sheet獲取現有值,然后覆蓋要覆蓋的列,然后使用一個數組更新整行
  2. 您只覆蓋要更新的特定單元格,其余保持原樣

上面的選項 1 會更快,但我們說的是幾分之一秒。 因此,我推薦選項 2,因為它不會觸及包含您不想更改的字段的現有行。

我的建議在這里:

function copyHandler(){
  const activeSheet = SpreadsheetApp.getActive()
  var sourceSheet  = activeSheet.getSheetByName("Total");
  const sourceLastRowNum = sourceSheet.getLastRow()
  var destSheet  = activeSheet.getSheetByName("vnSheet");
  const destLastRowNum = destSheet.getLastRow() + 1 

  const lastRow = sourceSheet.getRange(sourceLastRowNum, 1, 1, 6).getValues()[0]
  
  lastRow.forEach( (value, index) => {
    // Skip column C and column E 
    if( index == 2 || index == 4) return

    destSheet.getRange(destLastRowNum, index+1).setValue(value)
  })

  
}

暫無
暫無

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

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