J'aimerais pouvoir supprimer une ligne entière dans un tableur Google si la valeur entrée pour la colonne "C", par exemple, est 0 ou vide. Y at-il un script simple que je pourrais écrire pour accomplir ceci? Merci!
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);
}
}
Cela ne concerne que la valeur d'une cellule unique modifiée maintenant et non les valeurs de la feuille entière.
J'ai écrit ce script pour faire la même chose pour l'une de mes feuilles de calcul Google. Je voulais pouvoir exécuter le script une fois que toutes les données étaient dans la feuille de calcul. J'ai donc ajouté une option de menu pour exécuter le script.
/**
* 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);
};
Je peux suggérer une solution simple sans utiliser de script !!
Supposons que vous souhaitiez supprimer les lignes contenant du texte vide dans la colonne C . Triez les données (Menu Données -> Trier la feuille par colonne C, A-> Z) dans la feuille de la colonne C afin que toutes les lignes de texte vides être disponible ensemble.
Il suffit de sélectionner toutes ces lignes ensemble et de cliquer avec le bouton droit de la souris sur -> supprimer les lignes . Vous pouvez alors trier à nouveau vos données en fonction de la colonne dont vous avez besoin . Terminé.
J'avais quelques problèmes avec les scripts et ma solution de contournement consistait à utiliser l'outil "Filtre".
Cela laissera les lignes contenant le mot recherché et vous pourrez les supprimer en les sélectionnant en bloc tout en maintenant la touche Maj enfoncée> clic droit> supprimer les lignes.
C'est ce que j'ai réussi à faire fonctionner. Vous pouvez voir que j'ai parcouru la feuille en arrière, de sorte qu'une ligne supprimée ne soit pas ignorée. J'espère que cela aide quelqu'un.
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);
}
}
}
demande assez simple. Essaye ça :
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: relisant la question, je ne suis pas sûr si la question demande une fonction «en direct» sur la fonction Edit ou une fonction (comme celle ci-dessus) à appliquer après la saisie des données. Ce n’est pas très clair pour moi ... alors n'hésitez pas à être plus précis si nécessaire;)
Ce code simple a fait le travail pour moi!
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); }
}
}
Il y a un moyen plus simple:
en lisant attentivement votre question, j'ai proposé cette solution:
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));
}
}
Ce script créera un menu lors du chargement du fichier et vous permettra de supprimer une ligne en fonction des critères définis dans la colonne C ou pas .