Format date intempestif lors importation données

Bonjour,

En fonction des données disponibles dans mon fichier csv, la colonne avec des données texte ( mais destinées à devenir numérique ) prend par défaut le format CUSTOM YY.M, ce qui fait que lors d’une réimportation pour réactualisation sur cette table,les données sera traduit en date., malgré une définition numérique ou texte de la colonne.

Bonjour !

Est-ce que cela ne règle pas le problème de simplement changer le type de la colonne en numérique ?
Vous pouvez également regarder si cela convient de passer par une formule d’initialisation qui corrige le format des données (par exemple :
return value.replace(“.”,”,”)
pour faciliter la reconnaissance du format nombre)

1 « J'aime »

Merci pour ces propositions qui fonctionnent à la première initialisation, mais si je veux réimporter, ce format induit YY.M prend le pas sur le type numérique ou initialisation demandée. Bug ?

Bonjour,

En effet, pourquoi mettre un format de date dans cette colonne si on souhaite des nombres ? Je n’y vois pas trop l’intérêt, et ça crée des problèmes à l’import tout en rendant impossible de manipuler ces informations. Un passage en type Numérique devrait régler tous les problèmes.

Effectivement, après quelques tests, lors d’un nouvel import et selon certaines conditions, Grist peut automatiquement convertir toute la colonne en format date (YY.M) même si la colonne est initialement en type Numérique.

Mes courts tests m’indiquent que c’est le cas quand toute la colonne est spécifiquement dans un format qui peut être reconnu comme YY.M, i.e :

  • le nombre est compris entre 10 et 99
  • les décimales peuvent être confondues avec des mois
    Quand il y a une seule valeur dans la colonne qui ne correspond pas à ce format (par ex, 39.43), cela ne reproduit pas l’erreur.

Cela dit, il y a plusieurs solutions :

  1. Appliquer une formule d’initialisation à la colonne, ou lors de l’import.
    Lors de l’import, quelque chose de ce style devrait fonctionner :
    number = str($nom_colonne.years)[2:]
    decimals = str($nom_colonne.month)
    return float(« . ».join([number, decimals]))

Il faut probablement légèrement l’adapter pour une formule d’initialisation qui s’applique dans la colonne directement dans le document, en remplaçant $nom_colonne par value, et en ajoutant une boucle if pour gérer le cas où la valeur injectée serait effectivement un float et non une date, afin d’éviter les erreurs.

  1. Préformater le fichier .csv en l’ouvrant au préalable via l’outil bloc-note, et en remplaçant tous les points par des virgules (si ça ne casse pas d’autres champs)

  2. Rajouter une fausse valeur à la fin qui ressemble plus à un nombre qu’à une date, et qui aide Grist à reconnaître le type de la colonne

J’espère que cela sera suffisant pour régler votre problème ! Je conçois que ce n’est pas très pratique, idéalement il faudrait que le process d’import respecte les types de colonnes du document Grist, surtout s’ils sont affectés par l’utilisateur.

1 « J'aime »