当前位置: 首页 > 知识库问答 >
问题:

删除Google电子表格中的所有空行

阙博容
2023-03-14

我刚刚开始使用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));
}

共有3个答案

胡高寒
2023-03-14

简要说明一下,我添加了这个“if”语句,以防止SergeInsas的代码在尝试删除空行时,如果没有空的底部行,则抛出错误。

将此if放在最后一行函数removemptyrows()附近,它不会引发错误:

  if (maxRows-lastRow != 0){
    sh.deleteRows(lastRow+1, maxRows-lastRow);
    }
裴和怡
2023-03-14

在Google Sheets中删除ConveContyRow和删除ConvePertyColns的脚本。它将之前提到的Serge和appTailor的所有内容放在一起。这是一个示例表,其中包含脚本文件

//Remove All Empty Columns in the Entire Workbook
function removeEmptyColumns() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]
var maxColumns = sheet.getMaxColumns(); 
var lastColumn = sheet.getLastColumn();
if (maxColumns-lastColumn != 0){
      sheet.deleteColumns(lastColumn+1, maxColumns-lastColumn);
      }
  }
}

//Remove All Empty Rows in the Entire Workbook
function removeEmptyRows() {
var ss = SpreadsheetApp.getActive();
var allsheets = ss.getSheets();
for (var s in allsheets){
var sheet=allsheets[s]
var maxRows = sheet.getMaxRows(); 
var lastRow = sheet.getLastRow();
if (maxRows-lastRow != 0){
      sheet.deleteRows(lastRow+1, maxRows-lastRow);
      }
  }
}
陆雅志
2023-03-14

其工作原理如下:

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

注意:如有必要,可以使用相同的方式处理列,包括使用getMaxColumn()、getLastColumn()和deleteColumns(number,howmount)

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

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);
}

仅查看演示表-复制一份以供使用

 类似资料:
  • 问题内容: 如何使用Java SE从txt文件中删除所有空格和空行? 输入: 输出: 谢谢! 问题答案: 这样的事情怎么样: 注意-未经测试,可能不是完美的语法,但可以为您提供一个思路/方法。 请参阅以下JavaDocs以作参考: http //download.oracle.com/javase/7/docs/api/java/io/FileReader.html http://download

  • 我正在尝试从多个google电子表格中删除一个特定的表格。 我有一个主电子表格,从所有其他电子表格收集数据。从主电子表格中,我可以在其他电子表格中执行不同类型的操作,如添加工作表、重命名工作表、隐藏和锁定工作表。 但无法删除其他电子表格中的表格。查看了其他线程,但找不到任何解决方法。 这就是我到目前为止得到的。它停在这一排: "fname.delete表(本周);}" 我很感谢大家对我的帮助,因为

  • 问题内容: 在Go中从某个任意字符串中剥离所有空格的最快方法是什么。 我从字符串包中链接了两个函数: 有人有更好的方法吗? 问题答案: 以下是一些用于从字符串中剥离所有空格字符的不同方法的基准:(源数据): :用途; 随着遇到更多的非空白字符,逐渐增加分配的空间量 :和; 产生大量中间数据 用途; 执行一次分配,但是如果源字符串主要是空格,则可能会总体上分配。 package main_test

  • 问题内容: $(“#topNav” + $(“#breadCrumb2nd”).text().replace(” “, “”)).addClass(“current”); 这是我的代码的一部分。我想在获取另一个ID的text属性后向ID添加一个类。问题在于,持有我需要的文本的ID包含字母之间的空格。 我希望删除空白。我已经尝试过,但这只能部分起作用。该只删除第一个空间。 问题答案: 您必须告诉re

  • 我使用codeigniter发送一些电子邮件。除了主题外,一切都很好。我正在创建这样的自定义主题行 像这样使用它 但是当我收到电子邮件时,主题行看起来像 相反,我需要它就像 这是我的职责

  • 我们使用Google Sheet API v4。我们希望用空数据清除整个工作表。我们不想删除行/列。 UpdateCells调用不起作用(通过API删除列):开发人员。谷歌。com 工作UpdateCells调用(所有单元格):开发人员。谷歌。com