使用 Apps 脚本删除 Google 表格中的空行后复制数据?
Copying data after deleting empty rows in Google Sheets using Apps Script?
以下代码运行良好。它正在排序、删除重复项和删除空行。然后我只想将数据行复制到最后一个数据行之后。但是代码正在复制具有空行的数据行。复制时需要避免空行
var column = 3;
range.sort({column: column, ascending:true});
range.removeDuplicates([column]);
//now delete empty rows if any
for (var i = range.getHeight(); i >= 1; i--){
if(range.getCell(i, 1).isBlank()){
sheet.deleteRow(range.getCell(i, 1).getRow());
}
}
//For Double periods in a class
var dataToCopy = range.getValues(); //Gets the values of the source range in a 2 dimensional array
var copyData = sheet.getRange(range.getLastRow()+1,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy);
我相信你的目标如下。
- 脚本中的 for 循环结束后,您想要检索不含空行的值。
为此,这个答案怎么样?
修改点:
- 本回答统计了删除行数,从
range
减少到range.getValues();
。这样,dataToCopy
不包括空行。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
var column = 3;
range.sort({column: column, ascending:true});
range.removeDuplicates([column]);
//now delete empty rows if any
var deleteRows = 0; // <--- Added
for (var i = range.getHeight(); i >= 1; i--){
if(range.getCell(i, 1).isBlank()){
sheet.deleteRow(range.getCell(i, 1).getRow());
deleteRows++; // <--- Added
}
}
//For Double periods in a class
var dataToCopy = range.offset(0, 0, range.getNumRows() - deleteRows).getValues(); // <--- Modified
var copyData = sheet.getRange(sheet.getLastRow()+1,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy); // <--- Modified
- 如果要将值放在
range
的最后一行,请将最后一行修改为脚本的最后一行。
参考文献:
以下代码运行良好。它正在排序、删除重复项和删除空行。然后我只想将数据行复制到最后一个数据行之后。但是代码正在复制具有空行的数据行。复制时需要避免空行
var column = 3;
range.sort({column: column, ascending:true});
range.removeDuplicates([column]);
//now delete empty rows if any
for (var i = range.getHeight(); i >= 1; i--){
if(range.getCell(i, 1).isBlank()){
sheet.deleteRow(range.getCell(i, 1).getRow());
}
}
//For Double periods in a class
var dataToCopy = range.getValues(); //Gets the values of the source range in a 2 dimensional array
var copyData = sheet.getRange(range.getLastRow()+1,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy);
我相信你的目标如下。
- 脚本中的 for 循环结束后,您想要检索不含空行的值。
为此,这个答案怎么样?
修改点:
- 本回答统计了删除行数,从
range
减少到range.getValues();
。这样,dataToCopy
不包括空行。
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
var column = 3;
range.sort({column: column, ascending:true});
range.removeDuplicates([column]);
//now delete empty rows if any
var deleteRows = 0; // <--- Added
for (var i = range.getHeight(); i >= 1; i--){
if(range.getCell(i, 1).isBlank()){
sheet.deleteRow(range.getCell(i, 1).getRow());
deleteRows++; // <--- Added
}
}
//For Double periods in a class
var dataToCopy = range.offset(0, 0, range.getNumRows() - deleteRows).getValues(); // <--- Modified
var copyData = sheet.getRange(sheet.getLastRow()+1,1,dataToCopy.length,dataToCopy[0].length).setValues(dataToCopy); // <--- Modified
- 如果要将值放在
range
的最后一行,请将最后一行修改为脚本的最后一行。