0
votes

Comment accepter le format AA / MM / JJ dans les feuilles Google

J'exécute du code qui utilise et entre un rapport d'un autre système et utilise les données. Ce rapport comprend une colonne de dates au format AA / MM / JJ. Lorsque j'essaie de travailler avec ces données, la feuille de calcul ainsi que mon code l'interprètent comme JJ / MM / AA. ex. Le 16 juillet 2019 est interprété comme le 19 juillet 2016.

Après avoir lu un certain nombre d'autres articles, je me rends compte qu'il s'agit d'un problème de paramètres régionaux dans lesquels la feuille de calcul est formatée. J'ai essayé de nombreux formats, mais je ne trouve pas un paramètre régional au format AA / MM / JJ

Existe-t-il un paramètre régional au format AA / MM / JJ? Existe-t-il une autre solution de contournement permettant de convertir facilement ces dates? Au fil du temps, j'aurai beaucoup de données, le réglage manuel et la recherche / remplacement individuel ne sont pas des options.

Dans le pire des cas, je suppose que je peux aller stocker les données dans un tableau et le parcourir en boucle en l'éditant sous forme de chaîne pour décaler «YY» et «DD» mais cela semble inefficace et comme il devrait y en avoir fonctionnalité intégrée.

Modifier: À la demande de ceux ci-dessous, voici un lien vers une feuille de test qui montre le problème persistant.

https://docs.google.com/spreadsheets/d/1fLboQyF1ChEAFCpXTeDMU6su55oTgi67EpO_5MTPIdQ/edit?usp=sharing

Aussi, un exemple de code:

 if (Utilities.formatDate(new Date(SelectionList[y][0]), timeZone, 'yyyy-MMM-dd') == Utilities.formatDate(new Date(TotalData[x][2]), timeZone, 'yyyy-MMM-dd')) {
      //SelectionList[y][0] == TotalData[x][2]) {
      var Surgeon = SelectionList[y][1];
      break;
          }
      }

Comme vous pouvez le voir, j'appelle deux dates à partir de deux tableaux (SelectionList [y] [0] et TotalData [x] [2]) puis j'essaye de trouver le point où ils sont égaux. SelectionList est une constante que j'ai créée et donc formatée JJ / MM / AAAA parce que je savais que c'était un format qui fonctionnait. TotalData est généré par un rapport et est renseigné automatiquement en AA / MM / JJ. Lorsque j'essaie d'utiliser Utilities.FormatDate, le script interprète mal les dates TotalData à cause de cela. Pour être honnête, je suis moins préoccupé par le script car je sais pourquoi il ne fonctionne pas. Si je peux corriger la façon dont la feuille de calcul interprète la date d'origine, le script fonctionnerait très bien.

Lors de l'édition de cette réponse, une autre chose que j'ai remarquée est que lorsque je sélectionne une cellule donnée alors que la cellule affiche la date formatée du 18/07/16, la barre de formule indique le 18/07/2016, montrant clairement que la feuille de calcul interprète le 16 comme YY.

De plus, j'examine les données mois par mois. d'autres mois ont fonctionné sans problème. Je vois maintenant que l'erreur se produit parce que le début de ce mois ne contenait aucune donnée au cours des deux premières semaines. Les mois qui ont commencé au début comme le 19/06/02 ont été automatiquement interprétés comme AA / MM / JJ pour une raison qui m'échappe. Cela ne fonctionne pas de la même manière dans ma feuille de test.


2 commentaires

Les données importées sont-elles interprétées comme une date ou comme une chaîne? Pourriez-vous par hasard fournir un échantillon du code sur lequel vous travaillez, ainsi qu'un échantillon nettoyé de la feuille de calcul? Ce serait vraiment utile pour résoudre votre problème.


@lamblichus - J'ai modifié le message original pour inclure un exemple de feuille de calcul et du code, mais comme mentionné dans ma modification, je ne suis pas inquiet pour le code. Le problème est dans la feuille de calcul.


3 Réponses :


0
votes

voyez si cela ne vous aide pas dans quelque chose!

 entrez la description de l'image ici


1 commentaires

Malheureusement, cela ne fonctionne pas car la feuille ne sait pas quelle est l'année et quel est le jour. c'est-à-dire A1 = 18/07/16, lorsque j'applique votre formule "= TEXT (A1;" YYYY / MM / DD "), la sortie est 2016/07/18. Toutes les fonctions de formatage semblent fonctionner de la même manière car le tableur est convaincu que la cellule est le 18 juillet 2016 au lieu du 16 juillet 2018.



0
votes

Vous pouvez également aller dans votre menu principal Format -> Nombre -> Autre format -> Autre format date et heure puis choisir celui que vous voulez


3 commentaires

Malheureusement, cela ne fonctionne pas car la feuille ne sait pas quelle est l'année et quel est le jour. c'est-à-dire A1 = 18/07/16, lorsque j'applique une mise en forme personnalisée à partir du menu tel que "AAAA / MM / JJ", la sortie est 2016/07/18. Toutes les fonctions de mise en forme intégrées semblent fonctionner de la même manière, car la feuille de calcul est convaincue que la cellule est le 18 juillet 2016 au lieu du 16 juillet 2018.


Avez-vous essayé de mettre `` devant votre date car il peut la reconnaître comme une chaîne et la formater ensuite?


Cela ne fait aucune différence car la feuille de calcul pense toujours que les premiers chiffres sont DD et les derniers chiffres sont YY. De plus, dans la mesure du possible, je ne veux pas avoir à modifier manuellement les données de la feuille de calcul, car elles sont copiées à partir d'un autre rapport généré automatiquement.



0
votes

En supposant que les dates que vous souhaitez modifier sont dans la colonne A, à partir de la ligne 2, j'ai écrit un petit code qui change la date comme vous le souhaitez:

function changeDates() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getRange("A2:A").getValues();
  for(var i = 0; i < values.length; i++) {
    var value = values[i][0];
    var date = new Date(value);
    var day = date.getYear().toString();
    if(day.length == 4) { 
      day = day.slice(2); // Remove first two characters if input format has four characters (i.e. '2018')
    };
    var year = date.getDate();
    if(year.length == 2) { // Add '20' or '200' to the year depending on current day format
      year = '20'.concat(year);
    } else if(year.length == 1) {
      year = '200'.concat(year);
    }
    date.setDate(day);
    date.setYear(year);
    sheet.getRange(2 + i, 1).setValue(date);
  };
};

J'espère que c'est de toute aide.


2 commentaires

Cela aide pour la solution donnée, mais j'aimerais vraiment trouver un moyen de définir la valeur par défaut afin que je puisse éviter complètement ce problème. Merci pour l'aide.


Je ne pense pas que vous puissiez faire cela sans aucune fonction.