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?