Remplissage de champs en fonction d'un choix dans une liste déroulante  (Lu 452 fois) Partager ce sujet Imprimer

1 B


ARKED  24 novembre 2020 : 12:45

Bonjour,

Je tente de créer une fonction de remplissage d'adresse automatique en fonction d'un choix fait dans une liste déroulante.
Mon fichier comporte en pièce jointe un doc Excel type CSV avec en-têtes de colonnes.
(pour faire simple j'ai mis une photo de ma base de données sur le PDF)

A l'ouverture de mon fichier, un petit script d’initialisation:

//function init()
//{
var donneesCSV=this.getDataObjectContents("data.csv");
var lesDonnees=util.stringFromStream(donneesCSV);
var laChaine=lesDonnees.split(";");
//}

Une liste déroulante contient le nom des sites (ici L1,L2,L3...)
Et je souhaite que mes 5 champs se remplissent en fonction du choix fait dans la liste précédente...
Ça fonctionne presque.....  J'ai l'impression qu'il y a un problème de séparation par le ";" à chaque fin de ligne de donnée.

Si quelqu'un comprend pourquoi je suis preneur.

IP archivée


Merlin  24 novembre 2020 : 13:50

Bonjour

Le problème de base c'est que tu utilises un script de calcul dans chaque champ cible pour "tirer" chaque valeur dans chaque champ.
La bonne méthode c'est d'utiliser un seul script de format dans la liste déroulante pour "pousser" les valeurs dans tous les champs cibles.

IP archivée


ARKED  24 novembre 2020 : 14:07


 :Euuuh: Je ne comprends pas vraiment la différence mais j'ai testé.....
Suppression des calculs dans chaque champs et ajout du script "format" de la liste:

var choix = this.getField("MYLIST").currentValueIndices;


this.getField("Champ.0").value = laChaine[(choix * 5)];
this.getField("Champ.1").value = laChaine[(choix * 5)+1];
this.getField("Champ.2").value = laChaine[(choix * 5)+2];
this.getField("Champ.3").value = laChaine[(choix * 5)+3];
this.getField("Champ.4").value = laChaine[(choix * 5)+4]


Et j’obtiens le même résultat... :oh:
Le truc c'est que quand j'examine la chine issue de mon tableau de données, je remarque bien qu'entre la dernière donnée d'une ligne et la première donnée de la ligne suivante je n'ai pas le ";" donc pour le système, ces deux données n'en font qu'une.....


Ci dessous ma chaîne de données telle qu'extraite du fichier csv:
Nom;Prenom;adresse;telephone;e-mail 1NO;1P;1A;1T;1E 2N;2P;2A;2T;2E 3N;3P;3A;3T;3E 4N;4P;4A;4T;4E

IP archivée


Merlin  24 novembre 2020 : 17:48

bebarth est bien plus fort que moi en tableau, array, split, etc. Il t'expliquera surement mieux que moi, parce-que ce que je ne comprend pas c'est pourquoi le script (init) découpe les colonnes (sur le point-virgule) avant de découper les rangées (sur le saut de ligne). Ou alors j'ai raté quelque chose.
Le script init devrait plutôt ressembler à ça, et ensuite il faudrait découper les rangées :

var donneesCSV=this.getDataObjectContents("data.csv");
var lesDonnees=util.stringFromStream(donneesCSV);
var laChaine=lesDonnees.split("\n");

IP archivée


bebarth  25 novembre 2020 : 11:28

bonjour,

var laChaine=lesDonnees.split("\n
");

Ça change en fonction des options d'enregistrement du fichier .csv, ici les sauts de lignes sont interprétés par "\r\n".
Lorsque le script ne fonctionne pas, il faut vérifier les caractères des 2 premières lignes et on trouve le/les caractères de saut de ligne (\r -> code ascii 13 ou \n -> code ascii 10 ou \r\n).
Dans ton exemple, si tu rajoutes une ligne de script :
for (var i=0; i<40; i++) console.println(i+" : "+donnees.charCodeAt(i)); // pour vérifier les 41 premiers caractères de la chaine "donnees"Tu trouves :
35 : 13
36 : 10
Le retour lignes est donc "\r\n".
@+
 :bonjour:


IP archivée


ARKED  04 décembre 2020 : 08:44


Bonjour,
Je vais regarder et essayer ça... j'avais solutionné mon problème en ajoutant un espace dans la dernière cellule de chaque ligne, mais ça fait un peu bricolage... :jerisjaune:
Par contre je ne comprends pas pourquoi, dans mon fichier final, les mots comportant des lettres accentuées dans le fichier CSV sont importés dans mon formulaire mais sans la lettre accentuée... ex: "12 Allée des fougères" dans le CSV devient "12 Alle des Fougres" dans le formulaire....? :Euuuh:

Autre question, est il possible d'importer des données depuis un fichier CSV qui ne serait pas en pièce jointe de mon PDF, mais stocké sur le disque dur de l'ordi....?

IP archivée


ARKED  10 décembre 2020 : 10:19

Bonjour,

Est il possible d'importer des données depuis un fichier CSV qui ne serait pas en pièce jointe de mon PDF, mais stocké sur le disque dur de l'ordi....?
J'ai beau chercher je ne suis pas sur que ce soit possible....

IP archivée


Merlin  10 décembre 2020 : 10:49

C'est possible à condition d'utiliser un script d'application et à condition que le fichier CSV ne soit jamais déplacé ni renommé, sinon on ne peut qu'ouvrir la boite de dialogue de sélection du fichier à importer.

IP archivée


bebarth  10 décembre 2020 : 12:26

bonjour,

Par contre je ne comprends pas pourquoi, dans mon fichier final, les mots comportant des lettres accentuées dans le fichier CSV sont importés dans mon formulaire mais sans la lettre accentuée... ex: "12 Allée des fougères" dans le CSV devient "12 Alle des Fougres" dans le formulaire....? :Euuuh:
Pour conserver les caractères accentués, il faut que ton fichier soit codé en UTF-8.
Si tu utilises Excel, il vaut mieux utiliser le format proposé "CSV UTF-8 (délimité par des virgules) (.csv)". Par contre, dans ton script il faudra couper les chaînes de caractères aux virgules et non aux points-virgules !
@+
 :bonjour:

IP archivée


ARKED  11 décembre 2020 : 15:25

Bonjour,
Merci pour l'info Bebarth... J'ai voulu faire un essai, sauf que je n'ai pas ce format de fichier sous Excel (2016) Voir fichier joint...
En attendant j'ai remplacé les lettres avec accent par des lettres sans accent dans mon fichier CVS.....  ça me laisse le temps de chercher..... :Euuuh:

IP archivée


Merlin  11 décembre 2020 : 16:14

Sur Windows Excel et Acrobat utilisent le même encodage.
Excel permet d'exporter directement un fichier texte avec des TAB comme séparateurs, l'intitulé change selon les versions mais ça se trouve.
Ensuite on peut utiliser le suffixe qu'on veut (.txt ou .csv ou .tsv ou .toto) de toute façon c'est un fichier TXT et Acrobat ne tient pas compte du suffixe, le contenu attendu étant réputé être au format TXT.

IP archivée