web-dev-qa-db-fra.com

Comment faire en sorte que Google Sheets accède au rang d'aujourd'hui lorsqu'il est ouvert?

J'ai une feuille qui a beaucoup de lignes pour mettre des données. Comme il y a trop de lignes, je souhaite que le curseur passe à une ligne particulière lorsque la feuille est ouverte.

Edit not from OP: "La colonne de date contient les 365 jours entiers. Je souhaite accéder à la ligne correspondante, qui porte la date du jour lorsque j'ouvre le fichier." - Commentaire de OP.

6
Marco

Vous pouvez utiliser le script suivant (voir Tools > Script Editor). Il s'exécute chaque fois que la feuille de calcul est ouverte et recherche dans la colonne A la date du jour. Il place ensuite le curseur sur la cellule avec cette date. Vous pouvez utiliser une autre colonne au lieu de A en modifiant la commande sheet.getRange("A:A")

function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getRange("A:A");
 var values = range.getValues();  
 var day = 24*3600*1000;  
 var today = parseInt((new Date().setHours(0,0,0,0))/day);  
 var ssdate; 
 for (var i=0; i<values.length; i++) {
   try {
     ssdate = values[i][0].getTime()/day;
   }
   catch(e) {
   }
   if (ssdate && Math.floor(ssdate) == today) {
     sheet.setActiveRange(range.offset(i,0,1,1));
     break;
   }    
 }
}

Ce script emprunte à cette réponse par Serge insas.


Malheureusement, il semble impossible de lier un script à l’événement de basculement entre les feuilles. Donc, si vous souhaitez l'invoquer sur plusieurs feuilles, vous devez le faire manuellement. La version suivante, en plus de faire ce qui est décrit ci-dessus, ajoute également un nouvel élément de menu Custom > Jump to today's date, que vous pouvez utiliser sur n’importe quelle feuille. Cela vous permet également de revenir à la date si vous êtes en train de travailler avec la feuille.

function onOpen() {
 var menu = [{name: "Jump to today's date", functionName: "jumpToDate"}];
 SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
 jumpToDate();
}

function jumpToDate() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();
 var range = sheet.getRange("A:A");
 var values = range.getValues();  
 var day = 24*3600*1000;  
 var today = parseInt((new Date().setHours(0,0,0,0))/day);  
 var ssdate; 
 for (var i=0; i<values.length; i++) {
   try {
     ssdate = values[i][0].getTime()/day;
   }
   catch(e) {
   }
   if (ssdate && Math.floor(ssdate) == today) {
     sheet.setActiveRange(range.offset(i,0,1,1));
     break;
   }    
 }
}
9
user79865

C'est beaucoup plus simple maintenant en 2017:)

Ajoutez simplement "& range = A6" après l'URL de la feuille Google.

Le "& range" correspond à la plage à laquelle vous souhaitez placer le curseur, le "A" à la colonne et le "6" à la ligne.

L'URL ressemblerait alors à quelque chose comme ceci: https://docs.google.com/spreadsheets/d/JrKpzRQVXptmRfuE/edit#gid = 0 & range = A6

Méthode alternative pour trouver l'URL: Si vous êtes sur une cellule spécifique, faites un clic gauche dessus et sélectionnez l'option "Obtenir un lien vers cette cellule". Il sera copié dans votre presse-papiers et vous pourrez le coller ou le modifier selon vos besoins.

3
gdesmedt1

Si vous êtes prêt à utiliser des filtres et à masquer les autres lignes, utilisez une vue filtre/filtre avec Filtrer par condition défini sur La date est> aujourd'hui

Comparaison avec d'autres alternatives

  • Cela fonctionnera pour les éditeurs et les lecteurs alors que les solutions basées sur des scripts ne fonctionnent que pour les éditeurs.
  • Une solution basée sur une URL, telle que l'inclusion de & range = someting ou l'utilisation de l'URL de la vue du filtre ne fonctionne qu'avec l'URL correspondante.
1
Rubén

Parcourez la colonne de tous les jours puis:

if (day == new Date()) {

//then get cell

sheet.setCurrentCell(cell);

}

en utilisant cette méthode

0
kiki