如果所述行中的单元格值为0或为空,则删除Google Spreadsheets中的行

Zac*_*ack 23 google-sheets google-apps-script

如果在该行中为"C"列输入的值为0或空白,我希望能够删除Google Spreadsheets中的整行.有没有一个简单的脚本我可以编写来完成这个?谢谢!

Bry*_*n P 22

function onEdit(e) {
  //Logger.log(JSON.stringify(e)); 
  //{"source":{},"range":{"rowStart":1,"rowEnd":1,"columnEnd":1,"columnStart":1},"value":"1","user":{"email":"","nickname":""},"authMode":{}}
  try {
    var ss = e.source; // Just pull the spreadsheet object from the one already being passed to onEdit
    var s = ss.getActiveSheet();

    // Conditions are by sheet and a single cell in a certain column
    if (s.getName() == 'Sheet1' &&  // change to your own 
        e.range.columnStart == 3 && e.range.columnEnd == 3 &&  // only look at edits happening in col C which is 3
        e.range.rowStart == e.range.rowEnd ) {  // only look at single row edits which will equal a single cell
      checkCellValue(e); 
    }
  } catch (error) { Logger.log(error); }
};

function checkCellValue(e) {
  if ( !e.value || e.value == 0) {  // Delete if value is zero or empty
    e.source.getActiveSheet().deleteRow(e.range.rowStart);
  }
}
Run Code Online (Sandbox Code Playgroud)

这仅查看现在单个单元格编辑的值,而不是整个工作表中的值.

  • @BryanP反向迭代不是更容易吗?`for(var row = values.length -1; row> = 0; --row)` (3认同)

Mik*_*ace 19

我写了这个脚本,为我的一个Google电子表格做同样的事情.我希望能够在电子表格中的所有数据之后运行脚本,因此我让脚本添加了一个菜单选项来运行脚本.

/**
 * Deletes rows in the active spreadsheet that contain 0 or
 * a blank valuein column "C". 
 * For more information on using the Spreadsheet API, see
 * https://developers.google.com/apps-script/service_spreadsheet
 */
function readRows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var rowsDeleted = 0;
  for (var i = 0; i <= numRows - 1; i++) {
    var row = values[i];
    if (row[2] == 0 || row[2] == '') {
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }
  }
};

/**
 * Adds a custom menu to the active spreadsheet, containing a single menu item
 * for invoking the readRows() function specified above.
 * The onOpen() function, when defined, is automatically invoked whenever the
 * spreadsheet is opened.
 * For more information on using the Spreadsheet API, see
 * https://developers.google.com/apps-script/service_spreadsheet
 */
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Remove rows where column C is 0 or blank",
    functionName : "readRows"
  }];
  sheet.addMenu("Script Center Menu", entries);
};
Run Code Online (Sandbox Code Playgroud)

之前测试电子表格:

在此输入图像描述

从菜单运行脚本:

在此输入图像描述

运行脚本后:

在此输入图像描述


ron*_*neo 15

我可以建议一个简单的解决方案,而不使用脚本!

假设您要删除C列中带有空文本的行.在表格C列中排序数据(数据菜单 - >按列C排序表格,A-> Z),这样所有空文本行将一起可用.

只需一起选择这些行,然后右键单击 - >删除行.然后,您可以根据所需的列重新排序数据.完成.


小智 6

我遇到了一些脚本问题所以我的解决方法是使用"过滤器"工具.

  1. 选择所有电子表格数据
  2. 点击过滤工具图标(看起来像酒杯)
  3. 单击要搜索的列的第一个单元格中的新可用过滤器图标.
  4. 选择"按条件过滤">设置条件(我使用的是"文本包含">"单词")

这将保留包含您搜索的单词的行,并且可以通过批量选择它们来删除它们,同时按住Shift键>右键单击>删除行.


Ser*_*sas 2

很简单的要求。尝试这个 :

 function try_It(){
 deleteRow(2); //// choose col = 2 for column C
 }

 function deleteRow(col){ // col is the index of the column to check for 0 or empty
 var sh = SpreadsheetApp.getActiveSheet();
 var data = sh.getDataRange().getValues();
 var targetData = new Array();
 for(n=0;n<data.length;++n){
 if(data[n][col]!='' && data[n][col]!=0){ targetData.push(data[n])};
 }
 Logger.log(targetData);
 sh.getDataRange().clear();
 sh.getRange(1,1,targetData.length,targetData[0].length).setValues(targetData);
 }
Run Code Online (Sandbox Code Playgroud)

编辑重新阅读问题我不确定问题是否要求“实时”编辑功能或输入数据后应用的功能(如上所示)...我不太清楚。 ..因此,如有必要,请随意更准确;)