wake-up-neo.net

Löschen Sie eine Zeile in Google Spreadsheets, wenn der Wert der Zelle in dieser Zeile leer ist

Ich möchte in der Lage sein, eine ganze Zeile in einem Google-Spreadsheets zu löschen, wenn der Wert für die Spalte "C" in dieser Zeile 0 oder leer ist. Gibt es ein einfaches Skript, das ich schreiben könnte, um dies zu erreichen? Danke!

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

Hierbei werden nur die Werte aus einer einzigen Zellenbearbeitung berücksichtigt, nicht die Werte im gesamten Arbeitsblatt.

21
Bryan P

Ich habe dieses Skript geschrieben, um dasselbe für eine meiner Google-Tabellen zu tun. Ich wollte in der Lage sein, das Skript auszuführen, nachdem sich alle Daten in der Kalkulationstabelle befunden haben. Daher muss das Skript eine Menüoption hinzufügen, um das Skript auszuführen.

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

Testkalkulation vor:

enter image description here

Skript aus Menü ausführen:

enter image description here

Nach dem Ausführen des Skripts:

enter image description here

16
Mike Grace

Ich kann eine einfache Lösung vorschlagen, ohne ein Skript zu verwenden !! 

Nehmen wir an, Sie möchten Zeilen mit leerem Text in Spalte C löschen. Sortieren Sie die Daten (Datenmenü -> Blatt nach Spalte C sortieren, A-> Z) in Blatt C, um alle Ihre leeren Textzeilen zusammen verfügbar sein.

Wählen Sie einfach alle diese Zeilen aus und klicken Sie mit der rechten Maustaste auf -> Zeilen löschen . Anschließend können Sie Ihre Daten nach der gewünschten Spalte neu sortieren . Fertig.

12
roneo

Ich hatte einige Probleme mit Skripten, daher war die Umgehung des Problems das "Filter" -Tool.

  1. Wählen Sie alle Tabellendaten aus
  2. Klicken Sie auf das Filter-Symbol (sieht aus wie Weinglas)
  3. Klicken Sie auf das neu verfügbare Filtersymbol in der ersten Zelle der Spalte, die Sie durchsuchen möchten.
  4. Wählen Sie "Nach Bedingung filtern"> Legen Sie die Bedingungen fest (ich habe "Text enthält"> "Wort" verwendet)

Dadurch bleiben die Zeilen, die das Wort enthalten, nach dem Sie suchen, und sie können gelöscht werden, indem Sie sie bei gedrückter Umschalttaste auswählen und dann mit der rechten Maustaste klicken und Zeilen löschen.

5
Adam

Das ist mir gelungen, Arbeit zu machen. Sie können sehen, dass ich rückwärts durch das Arbeitsblatt geschlungen wurde, sodass beim Löschen einer Zeile die nächste Zeile nicht übersprungen wurde. Ich hoffe das hilft jemandem.

  function UpdateLog() {

  var returnSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('RetLog');
  var rowCount = returnSheet.getLastRow();

  for (i = rowCount; i > 0; i--) {
    var rrCell = 'G' + i;
    var cell = returnSheet.getRange(rrCell).getValue();
    if (cell > 0 ){
      logSheet.
      returnSheet.deleteRow(i);
    }
  }
}
3
MikeD

recht einfache Anfrage. Versuche dies :

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

EDIT: Erneutes Lesen der Frage Ich bin nicht sicher, ob die Frage nach einer Live-Bearbeitung der Edit-Funktion oder einer Funktion (wie oben) nach der Eingabe der Daten gilt. Es ist mir nicht sehr klar ... also fühle mich frei, wenn nötig genauer zu sein;)

1
Serge insas

Dieser einfache Code hat die Arbeit für mich gemacht!

    function myFunction() {

      var ss = SpreadsheetApp.getActiveSpreadsheet();  // get active spreadsheet

      var activeRow = ss.getActiveRange().getRowIndex();  // get active/selected row

var start=1;
var end=650;
var match='';
var match2=0;   //Edit this according to your choice.

     for (var i = start; i <= end; i++) {
      var columnC = ss.getRange("C"+i).getValue();
      if (columnC ==match  || columnC ==match2){ ss.deleteRow(i); }
     }
    }
0

Es gibt einen einfacheren Weg:

  1. Verwenden Sie filters , um nur die Zeilen anzuzeigen, die Sie löschen möchten. Beispielsweise hatte meine Spalte, auf deren Grundlage ich Zeilen löschen möchte, Kategorien, A, B, C. Über die Filterschnittstelle habe ich nur A und B ausgewählt, die ich löschen wollte.
  2. Markieren Sie alle Zeilen und löschen Sie sie. In diesem Beispiel wurden alle A- und B-Zeilen effektiv ausgewählt und gelöscht. Jetzt zeigt meine Tabelle keine Zeilen.
  3. Schalten Sie den Filter aus. Dadurch werden meine C-Zeilen ausgeblendet. Erledigt!

nachdem ich Ihre Frage sorgfältig gelesen hatte, kam ich zu dieser Lösung:

function onOpen() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // create menu
  var menu = [{name: "Evaluate Column C", functionName: "deleteRow"}];

  // add to menu
  ss.addMenu("Check", menu);
}

function deleteRow() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // get active/selected row
  var activeRow = ss.getActiveRange().getRowIndex();

  // get content column C
  var columnC = ss.getRange("C"+activeRow).getValue();

  // evaluate whether content is blank or 0 (null)
  if (columnC == '' || columnC == 0) {
    ss.deleteRow(parseInt(activeRow));
  }
}

Dieses Skript erstellt beim Laden der Datei ein Menü und ermöglicht das Löschen einer Zeile basierend auf den in Spalte C festgelegten Kriterien oder nicht .

0