web-dev-qa-db-fra.com

Problème de format de date de script Google Apps (Utilities.formatDate)

Je suis assez nouveau dans Google Apps Script, alors soyez indulgent avec moi.

Je collecte des taux d'intérêt quotidiens auprès d'une banque sur Google Sheets et j'utilise le code suivant pour ajouter de nouvelles lignes pour les taux contenus dans A5: F5, avec la colonne A contenant les dates.

function recordHistory() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Interest Rates");
  var source = sheet.getRange("A5:F5");
  var values = source.getValues();
  values[0][0] = Utilities.formatDate(new Date(), "GMT+10:00", "yyyy-MM-dd");
  sheet.appendRow(values[0]);

};

Mon problème est le suivant - même si j'ai spécifié que le format de date est "aaaa-MM-jj", les dates de la colonne A de mes nouvelles lignes sont créées dans ce format "M/jj/aaaa".

J'ai essayé de pré-formater la colonne A entière avec "aaaa-MM-jj" en utilisant le menu déroulant Format dans Google Sheets, mais si j'exécute le code au-dessus de ma nouvelle ligne est toujours dans "M/jj/aaaa".

C'est comme si mon code ignorait complètement Utilities.formatDate. Pour info j'ai obtenu le code ci-dessus de ici .

8
sactyr

L'utilitaire Utilities.formatDate() formate une chaîne javascript. Cependant, lorsqu'elle est écrite dans la feuille de calcul, la nouvelle ligne de données est interprétée par Google Sheets pour déterminer les types de données et la mise en forme appropriée, comme si vous l'aviez tapée via l'interface utilisateur.

Étant donné que vous disposez d'une chaîne de date reconnaissable, Google Sheets décide qu'il s'agit d'une date, la stocke en tant que telle et applique le format de date par défaut.

Vous avez deux options pour que la date dans la feuille de calcul réponde à vos besoins de formatage.

  1. Forcez-le à être interprété comme une chaîne, même s'il ressemble à une date.

    cell.setValue(Utilities.formatDate(new Date(), "GMT+10:00", "''yyyy-MM-dd"));
    //                                                           ^^ force string literal
    
  2. Définissez le format de date pour la cellule. Cela laissera la valeur de la cellule comme date, ce qui est utile pour les calculs.

    Les formats de date suivent la spécification SimpleDateFormat .

    // Cell A1 contains a date
    var cell = SpreadsheetApp.getActiveSheet().getRange("A1");
    cell.setNumberFormat('yyyy-mm-dd');
    
10
Mogsdad

Solution :

values[0][0] = Utilities.formatDate(new Date(), 
"GMT+10:00", "yyyy-MM-dd").setNumberFormat('yyyy-mm-dd');
1
Cory Kapty