web-dev-qa-db-fra.com

Gamme claire de cellules

J'essaie de créer un script pour Google Spreadsheets (qui est ma première fois), en effaçant une plage de certaines cellules.

Donc, par exemple, je veux effacer D5:D12 mais pas D13 et D14, mais encore une fois je veux effacer D15:D20, mais pas D21, butD22: D30` doit être effacé (et cela continue ainsi sur toute la feuille).

Tout ce que j'ai maintenant c'est ceci:

function onOpen() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
    var menubuttons = [ {name: "Clear Cells", functionName: "clear1"} ];
    ss.addMenu("Functions", menubuttons);
} 

function clear1() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Blad1');
  sheet.getRange('D5:D12').clearContent(),
  sheet.getRange('D15:D20').clearContent(),
  sheet.getRange('D22:D30').clearContent();
}

J'espère que vous pourrez m'aider à rendre cela plus facile. Parce que c’est beaucoup de travail de spécifier chaque plage.

d'ailleurs: toutes ces cellules sont colorées (couleur orange), y a-t-il moyen de clarifier une couleur spécifique peut-être?

3
Joris F.

Vous pouvez effacer uniquement les cellules avec un arrière-plan orange (code de couleur #ff9900) en obtenant les couleurs d'arrière-plan de toutes les cellules avec . GetBackgrounds () , puis en vérifiant qu'elles sont orange.

function clearOrange() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Blad1');
  var range = sheet.getDataRange();
  var bgColors = range.getBackgrounds();
  for (var i=0; i<bgColors.length; i++) {
    for (var j=0; j<bgColors[i].length; j++) {
      if (bgColors[i][j] === '#ff9900') {
        range.getCell(i+1,j+1).clearContent();
      }
    }
  }  
}

Je connaissais le code de couleur pour l'orange utilisé dans les feuilles de Google, car j'avais d'abord exécuté ce code avec l'instruction "if" remplacée par Logger.log(bgColors[i][j]);.

La raison de (i+1,j+1) est que les index dans JavaScript sont basés sur 0 tandis que les numéros de lignes et de colonnes sont à 1.


En termes hypothétiques, si vous n’avez pas utilisé le fond orange comme critère de nettoyage, vous devez spécifier les plages de manière explicite; le script doit savoir quoi effacer. Vous pouvez toujours raccourcir le script en plaçant les plages dans un tableau, comme ci-dessous.

function clear1() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Blad1');
  var rangesToClear = ['D5:D12', 'D15:D20', 'D22:D30'];
  for (var i=0; i<rangesToClear.length; i++) { 
    sheet.getRange(rangesToClear[i]).clearContent();
  }
}
6
user79865