J'essaie de créer un script Google Sheet Apps qui se met à jour quotidiennement à minuit. Je veux qu'il change la cellule qui est mise en évidence chaque jour. Chacune des 9 feuilles de mon projet représente un mois fictif de 40 jours chacune. Je veux que le 5ème mois (Van) soit le premier utilisateur et que le 12ème jour soit mis en évidence (D13). Après avoir parcouru les 40 jours de Voan, cela devrait se poursuivre jusqu'au mois suivant (à partir de 1). Lorsqu'il atteint le dernier mois, il devrait redémarrer l'année le premier mois (Peylior).
Voici les feuilles Google:
https://docs.google.com/spreadsBoqlwl4hwklwklwklwklwklwklwk1wklwklwklwklwk1klwklwk1 >? usp = sharing
Ce code fonctionnerait-il pour cela:
function addTrigger() {
ScriptApp.newTrigger("updateCell").timeBased().atHour(0).everyDays(1).create();
}
function updateCell() {
//set color
var color = (255,0,0)
//open google sheets
var ss = SpreadsheetApp
//open the spreadsheet
var sheet = ss.getActiveSpreadsheet()
//create mnths array
var mnths = [
"Peylior",
"Memnor",
"Rollur",
"Uduir",
"Voan",
"Azzaz",
"Waap",
"Dustrem",
"Predco",
]
//get "System"
var sys = sheet.getSheetByName("System")
//find the month
var mnthind = mnths.indexOf(sys.getRange(1,2).getValue())
//get day
var day = sys.getRange(2,2).getValue()
//add 1 to day
day += 1
//check if month is over
if (day > 40) {
//reset days
day = 1
//change month to next in array unless a year has passed
if (mnthind=12) {sys.getRange(1,2).setValue(mnths[1])}
sys.getRange(1,2).setValue(mnths[mnthind+1])
}
//set the background of current day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,5).setBackground(color)
//update all
sys.getRange(1,2).setValue(mnths[mnthind])
sys.getRange(2,2).setValue(day)
}
3 Réponses :
Je ne pense pas que vous souhaitiez qu'un script google apps fasse cela, utilisez simplement la mise en forme conditionnelle
Comment procéder avec la mise en forme conditionnelle? J'ai essayé cela en premier, mais je ne pouvais pas le comprendre.
Essayez ceci:
function updateCell() {
const color='#ff0000';
const def='#111111';//default color
const mnths=["Peylior","Memnor","Rollur","Uduir","Voan","Azzaz","Waap","Dustrem","Predco"];
const ss=SpreadsheetApp.getActive();
const sys=ss.getSheetByName("System");
var mnthind=mnths.indexOf(sys.getRange(1,2).getValue());//get current data before incrementing day
var sheet=ss.getSheetByName(mnths[mnthind]);//current month before change
var day=sys.getRange(2,2).getValue();//current day before change
day+=1;
if (day>40) {
day=1;
sheet.getRange(2,4,sheet.getLastRow()-1,1).setBackground(def);
if (mnthind==8) {
mnthindx=0;
sys.getRange(1,2).setValue(mnths[mnthind]);
}else{
mnthind+=1;
sys.getRange(1,2).setValue(mnths[mnthind])
}
}
sheet=ss.getSheetByName(mnths[mnthind]).getRange(2,4,sheet.getLastRow()-1,1).setBackground(def);//set column to default color
ss.getSheetByName(mnths[mnthind]).getRange(day+1,4).setBackground(color);//current day to selected color
sys.getRange(1,2).setValue(mnths[mnthind]); //save current day and month in sys
sys.getRange(2,2).setValue(day);
}
Non testé.
Il y a quelques problèmes avec le code.
Un nouveau déclencheur sera ajouté au projet chaque fois que vous exécuterez addTrigger () , alors soyez assurez-vous de vérifier les déclencheurs de votre projet et de supprimer les déclencheurs en double, vous n'en aurez peut-être pas besoin.
Vous voudrez probablement annuler la mise en surbrillance du jour précédent également, donc vous voudrez peut-être pour le coder.
Votre si est attribuer sans comparer . Utilisez le double signe égal (==) pour les comparaisons.
Votre calendrier a 9 mois et non 12, donc cela a été ajusté.
function updateCell() {
var sheet = SpreadsheetApp.getActiveSpreadsheet()
//create mnths array
var mnths = [
"Peylior",
"Memnor",
"Rollur",
"Uduir",
"Voan",
"Azzaz",
"Waap",
"Dustrem",
"Predco"
]
//get "System"
var sys = sheet.getSheetByName("System")
//find the month
var mnthind = mnths.indexOf(sys.getRange(1,2).getValue())
//get day
var day = sys.getRange(2,2).getValue()
//remove the background of past day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,4,1,2).setBackground("#d9d9d9")
//add 1 to day
day += 1
//check if month is over
if (day > 40) {
//reset days
day = 1
//change month to next in array unless a year has passed
if (mnthind == 8) {mnthind = 0}
else{ mnthind++}
sys.getRange(1,2).setValue(mnths[mnthind])
}
//set the background of current day to color
sheet.getSheetByName(mnths[mnthind]).getRange(day+1,4,1,2).setBackground("yellow")
//update all
sys.getRange(1,2).setValue(mnths[mnthind])
sys.getRange(2,2).setValue(day)
}
Quel est le problème avec le code dans la question?