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, but
D22: 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?
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();
}
}