Donnez vie à vos documents numériques !
 

Lier Excel à un champ de PDF – Import de données

abracadabraPDF Forums PDF – Général Lier Excel à un champ de PDF – Import de données

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45881
    olala
    Membre

    Bonjour à tous,

    J’ai créé un formulaire sur Acrobat Pro DC et je souhaiterai lier un champ de mon formulaire à un fichier Excel.
    Je vous explique :

    J’ai un fichier Excel avec 2 colonnes : la 1ère contient le nom de restaurants, la 2nde leur adresse.

    Sur mon formulaire, j’ai créé une liste déroulante avec mes choix de restos (pour l’exemple : Resto 1, Resto 2, Resto 3) et je souhaiterai, qu’automatiquement, en fonction du restaurant choisi, il récupère l’adresse via le fichier Excel et l’inscrive dans un autre champ.

    Je souhaite absolument passer par Excel car, j’ai simplement donné un exemple ici, mais mon fichier Excel est plus complexe que cela (de nombreuses lignes et un peu plus de colonnes..).

    J’ai cherché mais compliqué de trouver quelque chose de clair, d’autant que je ne maîtrise pas du tout Java.
    J’ai voulu passer par une importation de données via les propriétés du champ, mais il n’accepte que les fdf..
    J’ai églement essayé de passer mon Excel en fichier txt et de le mettre en PJ du pdf pour pouvoir recupérer les données mais là encore je ne maitrise pas vraiment Java

    Si vous pouviez m’aider sur le sujet,

    Merci

Affichage de 16 réponses de 1 à 16 (sur un total de 16)
  • Auteur
    Réponses
  • #64149
    Merlin
    Maître des clés

    Bonjour et bienvenue.

    Connaitre Java ne servirait à rien car les formulaires PDF utilisent JavaScript, voir : https://abracadabrapdf.net/forum/index.php/topic,2160.0.html
    :Smiley03:

    La façon de faire ce que tu cherches à faire a déjà été abordée de nombreuses fois dans le forum, il faut commencer par faire une recherche sur les mots clés : liste, mère, fille
    La suite va s’enchainer d’elle-même.
    :Smiley15:

    #64150
    olala
    Membre

    Bonjour Merlin,

    Merci beaucoup pour ta réponse rapide.
    EN cherchant, j’ai effectivement trouvé et réussi à aadapter le script dont j’avais besoin à mon cas et cela marche très bien !

    Il y a juste une ligne, qui marche, mais que je ne comprends pas bien. Si tu pouvais donner quelques explications sur la syntaxe, ce serait sympa. Je ne pense pas avoir besoin de noter tout le code ici.. :

    Code:
    for (var j = 0 ; j this.getField(“Resto”).setItems(fillarr) ;

    sachant que datarr et fillarr sont définis comme des tableaux. Je comprends la boucle, mais pas ce qui suit :

    Code:
    { fillarr[j] = [datarr[j][0], j] ;}

    [font=verdana, arial, helvetica, sans-serif]Le [datarr[j][0],j] n’est pas du tout clair pour moi[/font]
    [font=verdana, arial, helvetica, sans-serif]De la même façon, à quoi sert le[/font]

    Code:
    this.getField(“Resto”).setItems(fillarr)

    Merci !

    #64151
    olala
    Membre

    Et de la même façon, à quoi servent les valeurs d’exportation définies dans les propriétés de la liste déroulante ? Je ne comprends pas bien..

    #64152
    bebarth
    Maître des clés

    bonjour,

    Et de la même façon, à quoi servent les valeurs d’exportation définies dans les propriétés de la liste déroulante ? Je ne comprends pas bien..

    Lorsque l’on va lire la valeur d’une liste déroulante (.value), on récupère la valeur d’exportation, pas le texte que l’on voit dans la liste. Pour récupérer ce texte on utilise getItemAt (https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FField_methods.htm%23TOC_getItemAtbc-12&rhtocid=_6_1_8_31_2_11).
    Les valeurs d’exportations ne sont pas obligatoires, ça dépend du formulaire et de ce que tu veux voir ou récupérer.

    Pour le reste, ce serait plus simple d’indiquer le post où tu as trouver ces lignes pour avoir l’ensemble du script et non juste 2 lignes…

    @+
    :bonjour:

    #64153
    olala
    Membre

    Bonjour bebarth,

    Merci de ta réponse.
    Voici le code que j’ai trouvé, réalisé par Merlin il me semble :

    Code:
    //this.importTextData();

    var p = this.getDataObject(this.dataObjects[0].name)
    var fi = this.getDataObjectContents(p.name)
    var fit = util.stringFromStream(fi)
    var datarr1 = fit.split(“n”)

    var datarr = new Array()

    for (var i = 0 ; i this.getField(“RESTO”).setItems(fillarr) ;

    function selectme() {
    if (!event.willCommit) {
    this.getField(“Adresse”).value = datarr[event.changeEx][1] ;
    this.getField(“Mail”).value = datarr[event.changeEx][2] ;
    }
    }

    Le souci est que je dois rentrer et attribuer manuellement les noms de ma liste déroulante ainsi que leurs valeurs d’exportation (via options dans les propriétés de ma liste déroulante).
    Et si mes valeurs d’exportation que je rentre ne correspondent pas au numéro de ligne dans laquelle elle se trouve dans mon fichier excel, tout se mélange.

    Par ailleurs, est-ce la fonction 

    Code:
    this.getField(“RESTO”).setItems(fillarr) ;

    n’est pas censée remplir automatiquement ma liste déroulante avec mes en-têtes de mon fichier Excel ? (que j’ai tranformé en .txt et mis en PJ du doc).

    #64154
    olala
    Membre

    Et est-ce qu’il ne serait pas possible de faire une boucle comme ci-dessous, pour ne pas à avoir à définir de valeur d’exportation ? :

    Code:

    function selectme() {
    if (!event.willCommit) {

    for (var k = 0 ; k if (fillarr[k]=this.getfield(“RESTO”).getSelectedItem()) {
    this.getField(“Adresse”).value = datarr[k][1] ;
    this.getField(“Mail”).value = datarr[k][2] ;
    }
    }
    }
    }

    (Evidemment, j’ai essayé, ca ne marche pas..)

    #64155
    bebarth
    Maître des clés

    Tu n’as pas le lien au post de Merlin ?
    Je ne pense pas qu’il ait écrit ce script comme ça, il doit y avoir soit un fichier joint, soit un énoncé avant !
    Dans le script, il va chercher les textes et valeurs d’exportation dans un fichier joint.
    Sinon, si c’est Merlin qui a écrit ce script, je pense qu’il sera plus à même de te l’expliquer…
    @+
    :bonjour:

    #64156
    Merlin
    Maître des clés

    Si tu pouvais donner quelques explications sur la syntaxe, ce serait sympa.

    Effectivement, ça sera plus facile avec du code commenté :

    Code:
    /* importation texte */
    this.resetForm();
    this.getField(“ListeDeroulante”).clearItems(); // champ liste déroulante
    // importer l’unique pièce jointe sans la nommer
    var p = this.getDataObject(this.dataObjects[0].name)
    // importer le contenu de la pièce jointe
    var fi = this.getDataObjectContents(p.name)
    var fit = util.stringFromStream(fi)
    // séparation des rangées (séparateur saut de ligne)
    var datarr1 = fit.split(“n”);
    // séparation des colonnes (séparateur point-virgule)
    var datarr = new Array();
    for (var i = 0 ; i var fillarr = new Array() ;
    for (var j = 0 ; j // remplissage du champ liste déroulante
    this.getField(“ListeDeroulante”).setItems(fillarr); // champ liste déroulante

    De la même façon, à quoi sert le

    Code:
    this.getField(“Resto”).setItems(fillarr)

    Réponse en dernière ligne ci-dessus.
    :Smiley15:

    #64157
    bebarth
    Maître des clés

    …tu vois !!!
    :geek:

    #64158
    olala
    Membre

    Ok merci pour vos réponses à tous les 2 !

    Merci beaucoup pour les explications du code Merlin, c’est beaucoup plus clair maintenant.
    Mais ca ne marche pas dans mon fichier…

    1er cas : Dans ma fenêtre de propriétés de ma liste déroulante, voilà ce que je fais pour être sûr :

    – Je ne touche à rien dans l’onglet “Options”
    Dans l’onglet “Format”, je mets

    Code:
    selectme()

    dans le “Script de touches personnalisé”
    – Dans l’onlget “Actions”, sélectionner le déclencheur, je laisse “Champ désactivé”, dans sélectionner l’action, je mets Executer un script Javascript et je fais Ajouter et je colle mon script

    2e cas : J’ai également essayer de mettre le script directement dans les scripts du documents, mais cela ne marche pas non plus…

    Est-ce que je fais qqchose de mal ?
    Dans le 1er cas, quand j’ouvre le fichier et que je veux ouvrir ma liste déroulante, elle est bloquée, rien ne s’affiche
    Dans le 2e cas, ma liste déroulante n’affiche que des “undefined”

    #64159
    Merlin
    Maître des clés

    Il faudrait vraiment que tu donnes le lien du sujet dont tu parles et que tu partages tout ou partie de ton formulaire, parce-que toi tu le connais et tu l’as dans la tête.
    Pas nous.
    :Smiley15:

    #64160
    olala
    Membre

    Ok ci-joint mon fichier

    #64161
    Merlin
    Maître des clés

    Ci-joint.
    La première colonne alimente la liste déroulante, et la liste déroulante alimente les deux champs textes avec les colonnes 2 et 3.
    J’ai ajouté trois espaces en tête de liste dans le fichier TXT pour permettre à l’utilisateur de désélectionner.
    :Smiley15:

    #64162
    bebarth
    Maître des clés

    :extra:
    …ici, on pourrait peut être rajouter :

    Code:
    this.getField(“RESTO”).deleteItemAt(1);

    en fin de script afin de ne pas avoir l’intitulé des colonnes dans la liste déroulante.

    Merlin,
    J’aimerais bien que tu commentes “!event.willCommit” et “event.changeEx”.
    Ça m’aiderait à me lancer dans l’événementiel  :geek:
    Merci.

    @+
    :bonjour:

    #64163
    Merlin
    Maître des clés

    event.changeEx : reprend le numéro de “rangée” sélectionné dans la liste, on l’utilise pour aller chercher les données dans les autres colonnes de cette rangée.

    !event.willCommit : Je n’ai jamais bien compris pourquoi il y avait un !, je suppose que c’est parce-qu’on appelle la fonction via un script de format et non pas depuis un script de validation mais je n’ai jamais cherché plus loin. Il faudrait demander à Alex, le véritable auteur de ce script.
    :joker:

    #64164
    bebarth
    Maître des clés

    Merci Merlin,
    j’ai compris le résultat de ces 2 commandes, mais j’ai beau relire l’api reference et c’est vraiment l’utilisation que je ne comprend pas.
    Pour moi, “event.willCommit” vérifie s’il se passe quelque chose, et comme généralement le point d’exclamation est l’inverse, if (!event.willCommit) signifie “s’il ne se passe rien”…
    Pareil pour “event.changeEx” j’ai pas tout compris !
    @+
    :bonjour:

Affichage de 16 réponses de 1 à 16 (sur un total de 16)
  • Vous devez être connecté pour répondre à ce sujet.