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!
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.
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);
};
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.
Ich hatte einige Probleme mit Skripten, daher war die Umgehung des Problems das "Filter" -Tool.
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.
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);
}
}
}
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;)
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); }
}
}
Es gibt einen einfacheren Weg:
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 .