gpt4 book ai didi

javascript - 删除谷歌电子表格中的所有空行

转载 作者:数据小太阳 更新时间:2023-10-29 04:56:24 25 4
gpt4 key购买 nike

我刚刚开始使用 Google Apps 脚本来管理我正在处理的项目的一些工作表,我是 Javascript 的新手,所以如果我的代码中有任何问题,请放轻松!

我们有一个名为 forms2mobile 的应用程序,它可以捕获数据并将其放入 Google 电子表格中。它实际上会根据您使用的应用程序的哪个部分将不同的数据放入不同的工作表中。

我编写了一个脚本,该脚本从一张工作表(源)中提取所有数据,然后仅将某些列放入第二张工作表(目标)中。然后它会删除源中的所有行,以及目标中的所有空白行。

我遇到的问题是从目标中删除空白行。通常目标底部会有空行,而我的代码只会删除包含数据的范围内的空行。所以我总是在底部留下空行。

然后目标工作表将用作 forms2mobile 的数据源,这当然对空行不满意。

我找到了 getMaxRows() 类,但我不确定如何实现它。如果有人能提出任何建议,那就太好了。

干杯保罗

    function NEW_copyColumnNumbers( ) {
var spreadsheet_source = SpreadsheetApp.openById('1a89ZIUcy-8168D1damCV3Q9Ix0arQn9jGS6pgp');
var spreadsheet_target = SpreadsheetApp.openById('1GQiLt9utSH_6CV__oJwmcLOkI4E9iNIRPWU7Xr');
var range_input = spreadsheet_source.getRange("A2:CC407");
var range_output = spreadsheet_target.getRange("A"+(spreadsheet_target.getLastRow()+1));
var keep_columns = [66,66,10,11,12,13,14,23,26,31,69,71,74,75,80];

copyColumnNumbers(range_input, range_output, keep_columns);
clearEmptyRows();
clearSourceData();
}
function copyColumnNumbers( range_input, range_output, columns_keep_num ) {
// Create an array of arrays containing the values in the input range.
var range_values = range_input.getValues();
// Loop through each inner array.
for ( var i = 0, row_count = range_values.length; i < row_count; i++ ) {
// Loop through the indices to keep and use these indices to
// select values from the inner array.
for ( j = 0, col_keep_count = columns_keep_num.length; j < col_keep_count; j++ ) {
// Capture the value to keep
var keep_val = range_values[i][columns_keep_num[j]];
// Write the value to the output using the offset method of the output range argument.
range_output.offset(i,j).setValue(keep_val);
}
}
}
function clearEmptyRows() {
var ss = SpreadsheetApp.openById('1GQiLt9utSH_6CV__oJwmcLOkI4E9iNIRPWU7Xr');
var s = ss.getActiveSheet();
var values = s.getDataRange().getValues();
nextLine: for( var i = values.length-1; i >=0; i-- ) {
for( var j = 0; j < values[i].length; j++ )
if( values[i][j] != "" )
continue nextLine;
s.deleteRow(i+1);
}
//I iterate it backwards on purpose, so I do not have to calculate the indexes after a removal
}
function clearSourceData() {
var ss = SpreadsheetApp.openById('1a89ZIUcy-8168D1damCV3Q9Ix0arQn9jGS6pgp');
var s = ss.getActiveSheet();
var data = s.getDataRange().getValues();
for(var n =data.length+1 ; n<0 ; n--){
if(data[n][0]!=''){n++;break}
}
s.deleteRows(2, (s.getLastRow()-1));
}

最佳答案

它是这样工作的:

function removeEmptyRows(){
var sh = SpreadsheetApp.getActiveSheet();
var maxRows = sh.getMaxRows();
var lastRow = sh.getLastRow();
sh.deleteRows(lastRow+1, maxRows-lastRow);
}

注意:如有必要,您可以使用 getMaxColumn()getLastColumn()deleteColumns(number, howMany) 以相同的方式处理列

编辑

顺便说一句,这也是删除电子表格中空行的另一种方法...如果您将两者结合使用,它将完全“清理”您的工作表!

function deleteEmptyRows(){ 
var sh = SpreadsheetApp.getActiveSheet();
var data = sh.getDataRange().getValues();
var targetData = new Array();
for(n=0;n<data.length;++n){
if(data[n].join().replace(/,/g,'')!=''){ targetData.push(data[n])};
Logger.log(data[n].join().replace(/,/g,''))
}
sh.getDataRange().clear();
sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
}

Demo sheet in view only - make a copy to use

关于javascript - 删除谷歌电子表格中的所有空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26386492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com