我需要从 Google 表格中过滤和复制的数据中删除 header 行(?)
I need to remove the header rows(?) from my filtered and copied data in Google Sheets
已编辑:在代码 运行 之后包含数据图像。
我有一个 google sheet 保存着一些特定于百分比的数据。当达到这个百分比时,就不再需要该行。我想将其复制到另一个 sheet 以将其保存在存档中。我有一个复选框,用于 select 不再需要的多行,我将有一个按钮,该按钮将 运行 脚本移动行。
我尝试了几次代码迭代,但每次都会复制顶部的额外行。我尝试了各种函数,例如偏移量、行深度、移位但没有成功。 (我可能没有把代码放在正确的地方。)
这是数据布局的屏幕截图:
Layout of data
这是我目前正在尝试使用的代码:
function create_filter(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Template");
const range = sheet1.getRange("A:S");
const filter = range.createFilter();
const filterCriteria1 = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('TRUE')
const col1 = 19;
const add_filter1 =filter.setColumnFilterCriteria(col1,filterCriteria1);
Logger.log("Filter has been added.");
var rangeData = sheet1.getDataRange();
const sheet2 = ss.getSheetByName("Archive");
range.copyTo(sheet2.getRange(3,1));
filter.remove();
}
我最终复制的内容:
You can see the extra row here
谢谢
您的屏幕截图表明第 Archive!1:2
行已经包含 header 作为静态文本。您正在复制这两行下方的所有 range
。问题是 range
包含 header 行。您可以尝试像这样修复它:
const range = sheet1.getRange('A2:S');
每次 运行 脚本都会覆盖 Archive
中的先前数据。要附加数据而不是覆盖它,您可以使用 appendRows_() 实用函数,如下所示:
function archiveData() {
const ss = SpreadsheetApp.getActive();
const values = ss.getRange('Template!A3:S')
.getValues()
.filter(row => row[18]); // column S
const targetSheet = ss.getSheetByName('Archive');
appendRows_(targetSheet, values, 1);
}
已编辑:在代码 运行 之后包含数据图像。
我有一个 google sheet 保存着一些特定于百分比的数据。当达到这个百分比时,就不再需要该行。我想将其复制到另一个 sheet 以将其保存在存档中。我有一个复选框,用于 select 不再需要的多行,我将有一个按钮,该按钮将 运行 脚本移动行。 我尝试了几次代码迭代,但每次都会复制顶部的额外行。我尝试了各种函数,例如偏移量、行深度、移位但没有成功。 (我可能没有把代码放在正确的地方。)
这是数据布局的屏幕截图: Layout of data
这是我目前正在尝试使用的代码:
function create_filter(){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet1 = ss.getSheetByName("Template");
const range = sheet1.getRange("A:S");
const filter = range.createFilter();
const filterCriteria1 = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('TRUE')
const col1 = 19;
const add_filter1 =filter.setColumnFilterCriteria(col1,filterCriteria1);
Logger.log("Filter has been added.");
var rangeData = sheet1.getDataRange();
const sheet2 = ss.getSheetByName("Archive");
range.copyTo(sheet2.getRange(3,1));
filter.remove();
}
我最终复制的内容: You can see the extra row here
谢谢
您的屏幕截图表明第 Archive!1:2
行已经包含 header 作为静态文本。您正在复制这两行下方的所有 range
。问题是 range
包含 header 行。您可以尝试像这样修复它:
const range = sheet1.getRange('A2:S');
每次 运行 脚本都会覆盖 Archive
中的先前数据。要附加数据而不是覆盖它,您可以使用 appendRows_() 实用函数,如下所示:
function archiveData() {
const ss = SpreadsheetApp.getActive();
const values = ss.getRange('Template!A3:S')
.getValues()
.filter(row => row[18]); // column S
const targetSheet = ss.getSheetByName('Archive');
appendRows_(targetSheet, values, 1);
}