使用copyTo函数将过滤后的范围复制到另一张没有标题的工作表

问题描述 投票:0回答:1

如果我问的问题已经解决,我很抱歉,但我读了很多,但仍然找不到答案。

我正在尝试使用 AppScripts 上的 copyTo 函数将过滤后的范围复制到另一张工作表,但我无法忽略标题。

这是代码:

function newColumnFormula() {

var sheet = SpreadsheetApp.openById("XXX").getSheetByName("XXX");
var targetSheet = SpreadsheetApp.openById("XXX").getSheetByName("XXX");
var lastColumn = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
sheet.insertColumnAfter(lastColumn);

var formula = "=T2-G2";
var newColumnRange = sheet.getRange(2, lastColumn + 1, lastRow - 1, 1);
newColumnRange.setFormula(formula); 

sheet.getDataRange().createFilter();
var filterCriteria = 
SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(30).build();
sheet.getFilter().setColumnFilterCriteria(lastColumn + 1, filterCriteria);

var filteredRange = sheet.getFilter().getRange(); 
var targetLastRow = targetSheet.getLastRow() + 1;
filteredRange.copyTo(targetSheet.getRange(targetLastRow, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);}

尝试使用 slice(1) 和 shift() 但意识到它不适用于 copyTo。

提前致谢!

google-apps-script google-sheets filtering
1个回答
0
投票

建议:

更改了此代码:

var filteredRange = sheet.getFilter().getRange(); 

这段代码:

var rangeToCopy = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());

因为您只需要复制过滤后的数据,而不包括列标题。

完整代码示例:

function newColumnFormula() {

var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

var lastColumn = sheet.getLastColumn();
var lastRow = sheet.getLastRow();
sheet.insertColumnAfter(lastColumn);

var formula = "=T2-G2";
var newColumnRange = sheet.getRange(2, lastColumn + 1, lastRow - 1, 1);
newColumnRange.setFormula(formula); 

sheet.getDataRange().createFilter();
var filterCriteria = 
SpreadsheetApp.newFilterCriteria().whenNumberGreaterThan(30).build();
sheet.getFilter().setColumnFilterCriteria(lastColumn + 1, filterCriteria);

var rangeToCopy = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());
var targetLastRow = targetSheet.getLastRow() + 1;
rangeToCopy.copyTo(targetSheet.getRange(targetLastRow, 1), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

}

如果您有任何进一步的说明,请告诉我,因为这些示例是基于我对您帖子的理解。

© www.soinside.com 2019 - 2024. All rights reserved.