web-dev-qa-db-fra.com

Google Sheets transmettant la valeur de la cellule d'objet à nombre

Une cellule d'un document Google Sheets contient une valeur donnée par un SOMME de cellules au format "heures écoulées": "minutes écoulées". Tenter de faire des calculs dans un script personnalisé sur cette cellule provoquera des erreurs. Une investigation plus poussée en utilisant la fonction typeof () montrera ceci comme "objet". Comment puis-je convertir la valeur de la cellule en nombre? Vous avez tenté parseInt () ou parseFloat () sans succès .... Dans la feuille liée ici vous verrez que:

  • cellule A1 ayant une formule qui retourne 288:00 formaté en tant que durée,
  • la cellule A2, ayant =daysHrsMins(A1), qui renvoie une valeur négative, -3.179.700.519.840.000,00 à partir de la fonction suivante:

    function daysHrsMins(input) {
       return input*1440;
    }
    

Paramètres régionaux: Italie
Paramètres de fuseau horaire: (GMT +1) Paris

1
Riccardo

Réponse courte

Comment convertir une valeur de cellule en nombre?

Sur Google Sheets, les durées ne sont qu'un format d'affichage des valeurs de date. Ainsi, lorsqu'une fonction personnalisée prend une durée, elle est traitée comme un objet de date.

Explication

Faire des opérations arithmétiques

Lorsque nous effectuons des opérations arithmétiques sur les dates/heures/durée, nous devons garder à l’esprit les points suivants:

  • Google Sheets

    • Utilisez le jour comme unité
    • Utilisez le 30 décembre 1899 0:00:00 comme zéro.
    • Ne gère pas les fuseaux horaires, mais les feuilles de calcul ont un paramètre de fuseau horaire.
  • Script Google Apps/JavaScript

    • Utiliser les millisecondes comme unité
    • 1er janvier 1970 0:00:00 en UTC comme le zéro.
    • L'objet Date inclut le fuseau horaire.
    • Le projet de script a un paramètre de fuseau horaire.

Format d'affichage

  • Google Sheets

    • A un format de durée ([h]:mm:ss.00).
  • Script Google Apps/JavaScript

    • A la méthode tilitaires et la méthode formatdate.
    • N'a pas un format de durée intégré.

Transfert de dates entre Google Sheets et Google Apps Script

Lorsqu'une valeur de date est transférée de Google Sheets vers un script Google Apps ou inversement, elle est automatiquement convertie en fonction du fuseau horaire de la feuille de calcul.

Solution

Étant donné que la gestion de la durée et de la date dans Google Sheets et les scripts Google Apps est différente, la solution la plus simple consiste à effectuer la conversion de date/durée en nombre dans l'application Origin.

Sur Google Sheets, nous pourrions utiliser TO_PURE_NUMBER pour effectuer cette conversion:

=daysHrsMins(TO_PURE_NUMBER(A1))

Pour certains cas d'utilisation, il peut être pratique d'utiliser une bibliothèque JavaScript telle que moment.js

Références

Questions et réponses sur ce site:

Questions et réponses relatives au débordement de pile

2
Rubén