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

删除最后一个非空行之后的所有行

周奇文
2023-03-14

我有大量数据,需要清理。B列为关键列;如果B列中有空值,则可以删除该行的其余部分。

我在B列上排序,所有的空值都在表的底部。在C-BZ列中有数据,但在B中没有。我想自动识别B中最后一个非空值(假设它是单元格B3841),然后删除工作表底部的3842行。我的数据集每天都在变化。

下面的代码对B列进行排序,然后删除所有完全空的行。我还想删除在B列中为null但在C或D或任何其他行中可能有数据的行。

function cleanData(){

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('data'), true);


  var columnToSortBy = 1;
  var tableRange = "A:AZ";

  if(1 == 1){   
    var range = spreadsheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: false } );
  }

  var morecleaning = spreadsheet.getSheets();
  for (var s in morecleaning){
  var sheet = morecleaning[s]
  var maxRows = sheet.getMaxRows(); 
  var lastRow = sheet.getLastRow();
    if (maxRows-lastRow != 0){
      sheet.deleteRows(lastRow+1, maxRows-lastRow);
    }}


};

共有2个答案

万俟修诚
2023-03-14
function cleanData(){

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('data'), true);


  var columnToSortBy = 1;
  var tableRange = "A:AZ";

  if(1 == 1){   
    var range = spreadsheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: false } );
  }

  var morecleaning = spreadsheet.getSheets();
  for (var s in morecleaning){
  var sheet = morecleaning[s]
  var maxRows = sheet.getMaxRows(); 
  var lastRow = sheet.getLastRow();
    if (maxRows-lastRow != 0){
      sheet.deleteRows(lastRow+1, maxRows-lastRow);
    }}

  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('data');



  var rg=sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn());
  var vA=rg.getValues();
  var vB=[];
  for(var i=0;i<vA.length;i++) {
    if(vA[i][1]) {
        vB.push(vA[i]);
      }
    }
  sh.clearContents();
  sh.getRange(1,1,vB.length,vB[0].length).setValues(vB);

  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('data'), true);


var allsheets = spreadsheet.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

删除B=="所在的所有行

function cleanData(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('data');
  var rg=sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn());
  var vA=rg.getValues();
  var d=0;
  for(var i=0;i<vA.length;i++) {
    if(!vA[i][1] && vA[i][1].toString().length==0) {
      sh.deleteRow(i+1-d++);
    }
  }
}

是否希望对所有工作表执行此操作?如果是,请告诉我。

你可以对所有的床单都这样做。

function cleanData(ss,sh){
  if(ss && sh) {
    var rg=sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn());
    var vA=rg.getValues();
    var d=0;
    for(var i=0;i<vA.length;i++) {
      if(!vA[i][1] && vA[i][1].toString().length==0) {
        sh.deleteRow(i+1-d++);
      }
    }
  }else{
    Logger.log('Invalid Parameters'):
  }
}

function forAllSheets() {
  var ss=SpreadsheetApp.getActive();
  var shts=ss.getSheets();
  for(var i=0;i<shts.length;i++) {
    cleanData(ss,shts[i]);
  }
}

要大大加快速度,请尝试将清理数据更改为:

function cleanData(ss,sh){
  if(ss && sh) {
    var rg=sh.getRange(1,1,sh.getLastRow(),sh.getLastColumn());
    var vA=rg.getValues();
    var vB=[];
    for(var i=0;i<vA.length;i++) {
      if(vA[i][1]) {
        vB.push(vA[i]);
      }
    }
    sh.clearContents();
    sh.getRange(1,1,vB.length,vB[0].length).setValues(vB);
  }
}
 类似资料:
  • 我是新来的希望你们能帮我。。。 我是java编程的初学者,我想我对这个问题有点不知所措。 我的程序运行得很好,除了一个让我恼火的小细节。我有一个JTable,第一列有一个按钮,可以从表中删除这一行。它工作得很好,除了当我试图删除表的最后一行时,按钮停留在那里,然后表冻结,我无法删除任何行,因为我收到了一个“越界异常”。但是,当我使用命令表时。getRowCount()); 在删除该行之前和之后,表

  • 我想知道如何导入一个范围,排除源中第一个空行之后的所有行。 例如,假设有一张有200行的工作表,但第101行是空的,但从102到200,所有行都有值。我只想导入1:100行。 我需要独立于源工作表中有多少行来执行此操作,因为我们定期导入数据,每次导入时有效行的数量都会增加。

  • 我正在努力解决hackerrank的一个特殊问题。 为了解决这个问题,我使用hashmap创建了一个字典,我想用这个人的名字搜索电话号码。如果有一个条目与该名称,打印与名称的号码,否则打印未找到。 我得到了所需的输出,但有一个额外的空行。例如,当我搜索名称'J'和'K'时,字典中只有J,我的输出是:

  • 为什么要删除第一个空格和后面的所有内容?如果执行并打印后,最初是,则只打印而不打印。 这是一个更大项目的一部分,但出于测试目的,我在一个新的java主文件上单独尝试了它,并且仍然执行相同的操作这是完整的程序:

  • 问题内容: 我以为那不是难事,但我想用String.replaceAll删除所有空行(或Java中仅包含空白和制表符的行)。 我的正则表达式如下所示: 但这是行不通的。 我环顾四周,但仅发现用于删除空白行而不包含空格或制表符的正则表达式。 问题答案: 试试这个: 请注意,正则表达式匹配空格,制表符或管道字符! 编辑 顺便说一句,正则表达式也可以解决问题。

  • 问题内容: 我有以下代码: 控制台输出看起来像 我想在用户按下后删除文本。退格键无法做到。 问题答案: 这将在大多数unix和Windows终端中正常工作…它使用非常简单的ANSI转义。 请注意,在Windows上,您可能需要使用以下http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneo