从最后一行复制特定的列数据并粘贴到另一个 sheet
Copy specific Columns data from Last Row and paste to another sheet
我试图从我的“总计”[=32]最后一行的特定列中获取数据copy/fetch =],并将它们传递给另一个名为“vnSheet”的 sheet。我之前发现的下面的代码工作正常。但是,它复制了母亲 sheet 的所有行和列数据,这是我不希望发生的。
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()
获取“总计”中最后一行的行号 sheet,然后在每列字母后添加此值。
假设你把上面的结果赋值给一个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 脚本 类,因为它们很慢。减少调用次数的一种方法确实可以实现您正在寻找的结果,即使用 getRangeList
,它允许一次获得多个范围。另一种方法是使用 Advanced Sheets Service,因为它允许进行批量更新。
所以有几件事
- 据我所知,您目前没有得到最后一行
- 您目前有重复的变量来保存同一个数组
- 您目前正在复制整行,这不是您想要的
假设您的 Target Sheet
中的 C 和 E 列中已经有值,有几种方法可以解决问题:
- 您从
Target Sheet
获取现有值,然后覆盖您要覆盖的列,然后使用一个数组更新整行
- 您只需覆盖要更新的特定单元格,其余部分保持原样
上面的选项 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)
})
}
我试图从我的“总计”[=32]最后一行的特定列中获取数据copy/fetch =],并将它们传递给另一个名为“vnSheet”的 sheet。我之前发现的下面的代码工作正常。但是,它复制了母亲 sheet 的所有行和列数据,这是我不希望发生的。
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()
获取“总计”中最后一行的行号 sheet,然后在每列字母后添加此值。
假设你把上面的结果赋值给一个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 脚本 类,因为它们很慢。减少调用次数的一种方法确实可以实现您正在寻找的结果,即使用 getRangeList
,它允许一次获得多个范围。另一种方法是使用 Advanced Sheets Service,因为它允许进行批量更新。
所以有几件事
- 据我所知,您目前没有得到最后一行
- 您目前有重复的变量来保存同一个数组
- 您目前正在复制整行,这不是您想要的
假设您的 Target Sheet
中的 C 和 E 列中已经有值,有几种方法可以解决问题:
- 您从
Target Sheet
获取现有值,然后覆盖您要覆盖的列,然后使用一个数组更新整行 - 您只需覆盖要更新的特定单元格,其余部分保持原样
上面的选项 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)
})
}