Importation des données Excel™ – Défis

Les fichiers Excel™ sont utilisés comme tables de correspondance, des fichiers objectifs et de manière générale comme un moyen de transaction de données.

Ils sont souvent formatés par différents utilisateurs. Lorsqu'on sauvegarde des feuilles Excel™ en fichier TXT ou CSV, nous sommes confrontés au problème WYSIWYG (What You See Is What You Get = ce que vous voyez est ce que vous obtenez).

Cela peut donc causer une perte de données si l'on n'est pas vigilent.

Voici un exemple :

Le formatage appliqué dans la colonne C donne une représentation visuelle différente de celle dans la colonne B

Un export CSV de la feuille Excel ouvert dans un éditeur de texte donne ceci :

L'ouverture du même export dans Workbench, en mode éditeur de table, donne ceci :

En résumé, les erreurs rencontrées dans notre fichier sont les suivantes :

NomNombreFormatCommentaire
Général12345,67812345,678données bonnes
Nombre avec séparateur de milliers12345,67812 345,68chaine - manque de précision - espace dans le chiffre
Négatifs entre parenthèses-12345,678(12 345,68)chaine - manque de précision - espace dans le chiffre et parenthèses
Entier12345,678123456il manque la précision
Monétaire12345,678-12 345,68 €chaine - manque de précision - symbole monétaire présent
Scientifique12345,6781,23E+04données manquantes

Comment, dans Visual Integrator transformer (12 345,68) en -12345.68 ?

D'abord remplacer la virgule par un point.

Ensuite remplacer l'espace par un null.

Transformer la parenthèse ouvrante par le signe moins "-" par l'utilisation d'un calcul avec la définition suivante :

translate(string,"()","-z")

ce qui donne dans notre exemple : -12345.68z

l'utilisation d'un calcul avec la définition suivante :

replace(string,"z","")

ce qui donne dans notre exemple : -12345.68

Dans le cadre de l'utilisation d'un script build, le code suivant peut être utilisé :

build {
  text-input "/data/formatage nombres dans Excel.csv" delimiter=";" name="text-input_1" {
    column "Nom" type="string"
    column "Nombre" type="string"
    column "Format" type="string"
  }
  add "neg comma euro" `parse_double(replace(replace(translate(value("format"),"()€ ","-zzz"),"z",""),",","."))` name="calc neg comma euro"
  output "/cbases/kf_excel_corrected_numbers.cbase" name="output_cbase"
  layout-data {
    node name="text-input_1" position="8 8"
    node name="concat" position="88 8"
    node name="calc neg comma euro" position="168 8"
    node name="output_cbase" position="248 8"
  }
}

L’exécution du script ci-dessus donne dans ProDiver le résultat suivant :