Google 应用脚本 removes/deletes 任何空行

Google Apps Script that removes/deletes any empty rows

本质上,我正在寻找一个脚本,使我的单曲 Google Sheet(标题为 Main)没有任何空行。如果我有一行包含数据,一段时间后,该行中的所有数据都被清除,我希望脚本注意到并立即删除该行。任何 help/scripts 表示赞赏。

我正在通过外部应用程序管理 sheet 中的数据,结果是我能够(从应用程序中)“删除”一行。但它实际上所做的只是清除该行中的所有数据,它实际上并没有删除该行本身。所以我剩下的是一个 sheet ,它有分散的数据行。例如,过了一会儿,也许第 3 行、第 12 行、第 125 行和第 356 行中有数据,发生的情况是这些行(包含数据)之间的 space 是空行,而不是,使用脚本,它可以继续检查空行,并在它们变空时将其删除。

编辑 - 工作解决方案:

function deleteEmptyRows() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("Main");
  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
  var row = sheet.getLastRow();

  while (row > 2) {
    var rec = data.pop();
    if (rec.join('').length === 0) {
      sheet.deleteRow(row);
    }
    row--;
  }

  var maxRows = sheet.getMaxRows(); 
  var lastRow = sheet.getLastRow();

  if (maxRows - lastRow != 0) {
    sheet.deleteRows(lastRow + 1, maxRows - lastRow);
  }
}

看看Trigger. You will find the onEdit()触发器特别有用。

每次在关联的电子表格中进行编辑时,JavaScript 函数 onEdit() 将是 运行 并且它会得到一个 event object passed to it. You can use the event object to detect which kind of event happend e.g. a row was deleted. Filter the kind of event you want to react to and then do whatever you need to do using the APIs Google App Script provides. For a list of available changeTypes (i.e. row deleted, column inserted etc.) of a event object and its properties for Google Sheets see the documentation.

每五分钟删除 Sheet Main 中的空行

function delMts() {
  const ss = SpreadsheetApp.getActive();
  ss.toast('', "Removing Empties", 5);
  const sh = ss.getSheetByName("Main");
  const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues().filter(r => r.every(c => c != ''));
  sh.deleteRows(vs.length + 1,sh.getMaxRows() - vs.length);
  sh.getRange(1,1,vs.length,vs[0].length).setValues(vs);
}

//run this once
function createTriggerfordleMts() {
  if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "delMts").length == 0) {
    ScriptApp.newTrigger("delMts").timeBased().everyMinutes(5).create();
  }
}

此脚本抓取 sheet,从下往上迭代(从最后一个包含行的数据开始)并检查空行,如果找到,则将其删除,然后检查剩余的空行超出最后一个包含行的数据的行,如果它们为空,则立即删除它们。此外,此脚本设置有相应的 onChange 触发器,以便脚本在编辑 sheet 时随时运行,捕获任何新清除的行。

function deleteEmptyRows() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("Main");
  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
  var row = sheet.getLastRow();

  while (row > 2) {
    var rec = data.pop();
    if (rec.join('').length === 0) {
      sheet.deleteRow(row);
    }
    row--;
  }

  var maxRows = sheet.getMaxRows(); 
  var lastRow = sheet.getLastRow();

  if (maxRows - lastRow != 0) {
    sheet.deleteRows(lastRow + 1, maxRows - lastRow);
  }
}