1
votes

Comment faire pour mettre à jour quelle cellule est mise en évidence tous les jours à minuit

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)
}


1 commentaires

Quel est le problème avec le code dans la question?


3 Réponses :


-1
votes

Je ne pense pas que vous souhaitiez qu'un script google apps fasse cela, utilisez simplement la mise en forme conditionnelle


1 commentaires

Comment procéder avec la mise en forme conditionnelle? J'ai essayé cela en premier, mais je ne pouvais pas le comprendre.



0
votes

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é.


0 commentaires

0
votes

Il y a quelques problèmes avec le code.

Premièrement:

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.

Deuxièmement:

Vous voudrez probablement annuler la mise en surbrillance du jour précédent également, donc vous voudrez peut-être pour le coder.

Troisième:

Votre si est attribuer sans comparer . Utilisez le double signe égal (==) pour les comparaisons.

Quatrièmement:

Votre calendrier a 9 mois et non 12, donc cela a été ajusté.

Exemple:
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)
}


0 commentaires