首页 > 解决方案 > 从最后一行复制特定的列数据并粘贴到另一个工作表

问题描述

我试图从我的“Total”表的最后一行的特定列中复制/获取数据,并将这些数据传递给另一个名为“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});
 }
}

在这里,我只想 从“Total”'A', 'B', 'D', 'F'的最后一行复制(除 'C' & 'E' )列数据,并将这些数据粘贴到“vnSheet”的相同列中,但在Last row中。我几乎在整个互联网上搜索并没有找到我的问题的解决方案,我发现的所有内容都与上面的代码相似。

由于我是新手,因此我的编码经验有限,但我是 gd 学习者 :) 任何解决该问题的帮助将不胜感激。 谢谢

标签: google-apps-scriptgoogle-sheetsspreadsheet

解决方案


所以有几件事

  • 据我所知,您目前没有得到最后一行
  • 您当前有重复的变量来保存相同的数组
  • 您当前正在复制整行,这不是您想要的

假设您的 C 和 E 列中已经有值,Target Sheet有几种方法可以解决问题:

  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)
  })

  
}


推荐阅读