Donnez vie à vos documents numériques !
 

Exporter les champs d’un formulaire vers Excel

abracadabraPDF Forums PDF – Général Exporter les champs d’un formulaire vers Excel

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45946
    jeanrenov
    Membre

    Bonjour,

    Dans le cadre du travail nous utilisons un PDF interactif qui est complété lors de chaque rendez-vous, nous renseignant sur chaque renseignement utile à la suite de notre activité.
    Afin d’optimiser cette ressource nous aimerions extraire ces données (si possible celle de notre choix vu le nombre important de champs de formulaires) et les exporter vers un fichier Excel rendant la comparaison plus facile.

    Cependant je n’ai aucune idée de comment arriver à ce résultat, car pour avoir essayé la fonction de base de PDF qui permet l’exportation, celle-ci consiste juste à faire un copier-coller du document en lui-même, hors j’aimerais récupérer les informations qui correspondent à certains champs du formulaire (si possible pas tous) et pouvoir les trier plus tard sous une forme de tableau/base de données dans Excel.

    Merci d’avance
    (Je travaille sur Mac)

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

    Bonjour.

    Deux dessins valent mieux qu’un long discours.
    Au final on obtient un fichier .CSV utilisable avec n’importe quel tableur (Excel, LibreOffice…) ou base de donnée.
    :Smiley15:

    #64731
    Merlin
    Maître des clés

    1.

    #64732
    Merlin
    Maître des clés

    2.

    #64733
    jeanrenov
    Membre

    Merci ça répond parfaitement à ma premiere question, cependant comment puis je choisir les champs que je veux garder ? Du fait du nombre (vraiment vraiment) important de champs de formulaire present je devrais travailler avec 808 colonnes une fois le tout extrait, y’a t’il un moyen de réduire en choisissant les champs important?

    #64734
    Merlin
    Maître des clés

    Il faudra faire ce nettoyage dans le tableur.
    Pour faire le tri avant, depuis Acrobat, il faudrait développer un script JavaScript personnalisé, mais le jeu en vaut il la chandelle ?

    #64735
    jeanrenov
    Membre

    Le soucis c’est qu’il y’a tellement de champs de formulaire, bouton etc, que le nombre de colonne dépasse les 255, après n’ayant pas de connaissance dans le développement de script la tache me parait compliqué mais m’aiderai grandement dans l’automatisation de la collecte des données.
    Y’a t’il un post sur ce forum ou des tutos facile d’accès de préférence pouvant m’aider à réaliser ce script?

    #64736
    bebarth
    Maître des clés

    bonjour,
    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_getDataObjectContentsbc-43&rhtocid=_6_1_8_23_1_42
    A cette adresse, tu trouveras l’exemple qui me semble le plus approprié à ce que tu veux faire.
    Tu regardes et tu demandes si tu veux de l’aide…
    @+
    :bonjour:

    #64737
    jeanrenov
    Membre

    Ok merci, ça a l’air assez complexe tout de même et je n’aurai pas le temps de voir ça en details aujourd’hui.
    Mais pour résumé je dois utiliser la « formule » getdataobjectcontent ?

    Et en reprenant l’exemple la partie « get the name » reprends tout ce qui est texte et la partie « get budget number » tout ce qui est chiffre? Si oui je listerai mes champs dans cette partie et en indiquant vers quelle feuille de calcul je veux les rediriger en théorie ça fonctionnerai? (Encore une fois je n’ai jamais fais ça donc désolé si ce que je dis semble confus)

    Code:
    // Get the name and department of the current recipient
      var champ1 = this.getField(« champ1 »).value;
      var champ2 =  this.getField(« champ2t »).value;
      var champ3 =  this.getField(« champ3).value;
      // Get the budget number
      var champ4 =  this.getField(« champ4 »).value;
      if ( app.viewerVersion >= 7 ) {
          // Get the file stream object of the embedded file
          var oFile = this.getDataObjectContents(« données.xls »);

         
    Etc…

    #64738
    bebarth
    Maître des clés

    oui, c’est ça !
    Mais maintenant il faut intégrer tous les formulaires à ce script, et ça dépend complètement de ce que tu peux/veux faire…
    Ou se trouvent les fichiers ? Peut-on les déplacer ?
    Comment sont-il nommés ? Peut-on trouver un algorithme pour appeler les fichiers ou doit-on copier/coller les noms quelque part ?
    …en découlera la faisabilité et la complexité du script !
    @+
    :bonjour:

    #64739
    jeanrenov
    Membre

    Ce sont des fichiers pdf, pour chaque client son fichier pdf, le nommage se fait en fonction du nom mais attribuer un numero ou une date est possible et facilitera peut être le procédé? Ils sont rangés aux meme endroit et le but est qu’une fois par semaine ou mois on puisse récupérer toutes les infos contenues dans ces documents pour les extraire dans une base de données.

    #64740
    bebarth
    Maître des clés

    bonjour,
    Voici ce que je te propose :
    Tu places tes formulaires à traiter dans un même dossier « Formulaires » qui se trouve dans le même répertoire que « Exporter les champs vers Excel_BB.pdf ».
    Tu lances ce fichier, tu renseignes les noms de champs à extraire (j’en ai mis jusqu’à dix mais on peut modifier).
    Tu copies/colles les noms de fichiers dans le champ approprié (comme tu es sur Mac, ça se fait tout seul… je crois que ce n’est pas possible sur PC sans un utilitaire).Et tu appuies sur le bouton. Toutes les données seront copiées dans le fichier Excel attaché.
    Si tu veux une sauvegarde automatique de ce fichier pdf, il faudra passer par une action (fichier .sequ joint) ou ajouter un script d’application si tu veux absolument resté avec le bouton.
    Tu testes et tu me dis…
    @+
    :bonjour:

    #64741
    Merlin
    Maître des clés

    J’avais bien pensé à utiliser le « fichier réponse » qu’on peut créer avec Acrobat parce-que ça aurait été plus simple, mais je viens de tester : il ne permet pas de trier ni de supprimer les colonnes avant exportation.
    :mur:

    #64742
    jeanrenov
    Membre

    Tout d’abord, merci beaucoup de l’aide et du travail apporté, c’est vraiment sympa.
    Pour la partie technique malheureusement je suis confronté à deux erreurs, peut être proviennent t’il d’une mauvaise manipulation de ma part.
    J’ai une erreur qui me dit « au moins un nom de fichier doit être renseigné », alors que la liste est remplis. Et une autre erreur « le champ « undefined » n’a pas été trouvé. Aucune donnée n’a été importée dans le fichier Excel. » qui elle semble provenir une fois la recherche lancée.Et dernière question si cette méthode fonctionne comment je fais pour augmenter la liste du nombre de champs?

    #64743
    bebarth
    Maître des clés

    bonjour,
    Avec les fichiers exemples?
    Peux-tu faire les 2 mêmes copies d’écrans que j’ai faites, juste pour voir.
    @+
    :bonjour:

    #64744
    bebarth
    Maître des clés

    J’ai oublié de préciser, pour que l’on puisse copier les valeurs des champs des formulaires, il faut que les formulaires aient tous un script de document :

    Code:
    this.disclosed = true;

    C’est obligatoire pour copier d’un document à un autre !

    Et dernière question si cette méthode fonctionne comment je fais pour augmenter la liste du nombre de champs?

    Pour augmenter le nombre de champs, tu créés des champs supplémentaires nommés champ.10, champ.11, champ.12, etc.
    et tu modifies le script :

    Code:

    for (var i=0; i…


    Ici 9 était le numéro du dernier champ. Tu le remplaces par le numéro de ton dernier champ.
    @+
    :bonjour:

    #64745
    bebarth
    Maître des clés

    J’ai une erreur qui me dit « au moins un nom de fichier doit être renseigné », alors que la liste est remplis. Et une autre erreur « le champ « undefined » n’a pas été trouvé.


    C’est parce que j’avais laissé le script d’enregistrement dans le bouton alors qu’il ne peut fonctionner qu’avec une action.

    Remplace ce fichier, ça devrait mieux marcher.
    Essaye aussi l’action (fichier .sequ) qui fonctionne avec en plus un enregistrement avec la date.
    @+
    :bonjour:

    #64746
    Merlin
    Maître des clés

    Excellent !
    :bravo:

    (par-contre je précise pour ceux qui liront ça plus tard que ça ne fonctionne pas avec Acrobat Reader, Acrobat Pro ou Acrobat Standard est requis)

    #64747
    jeanrenov
    Membre

    Vraiment excellent, merci beaucoup pour le travail et les explications, t’as pas idée du nombre d’heure que tu viens de me faire économiser !
    Dernières questions, la à chaque fois ça crée un fichier excel c’est ça? y’a t’il moyen d’enregistrer ça dans un fichier excel déjà existant à la suite d’autre enregistrement ? (Au pire si c’est pas possible c’est pas grave, tellement le gain de temps engendrer par ta création est énorme, copier coller à la suite me dérange pas vraiment)
    Et enfin je comprends pas trop l’intérêt du fichier sequ tu peux m’expliquer ça de façon plus explicite?

    #64748
    bebarth
    Maître des clés

    bonjour,

    y’a t’il moyen d’enregistrer ça dans un fichier excel déjà existant à la suite d’autre enregistrement ?

    Pour Enregistrer à la suite du documen Excel, Tu enlèves ces 4 lignes :
    Si tu ne veux pas supprimer les lignes, tu places 2 slash en début de ligne (comme avant Initialisation…).

    Code:

          // Initialisation du fichier Data.xls
            for (var j=0; j        var oFile=util.streamFromString(lesDonnees);
            this.setDataObjectContents(« Data.xls », oFile);

    Mais tu n’auras plus les titres des colonnes automatiquement. Tu peux les créer lorsque ton fichier Excel est vierge, ils seront conservés.
    Par contre, ce sera toujours le même fichier attaché au document. Si les champs à extraire varient, les colonnes ne seront plus correctes.
    Tu peux extraire ce fichier Excel.

    Et enfin je comprends pas trop l’intérêt du fichier sequ tu peux m’expliquer ça de façon plus explicite?

    Si tu double-cliques sur le fichier .sequ, tu vas importer une action dans Acrobat Pro.
    Ensuite, au lieu d’appuyer sur le bouton « EXPORTER », tu lances l’action (outil Assistant d’actions). Ça fait exactement la même chose, et en plus ça t’enregistre ton document sous le nom « Données Formulaires du « +jour+ »-« +mois+ »-« +annee+ ».pdf »
    Ce document est enregistré au même niveau que ton document d’origine. Si la prochaine fois tu reparts de ce nouveau document, les données seront enregistrées à la suite du document Excel (à condition de supprimer les 4 lignes) et un nouveau document sera re-créé avec une nouvelle date… A tester !
    @+
    :bonjour:

    #64749
    jeanrenov
    Membre

    bonjour,Pour Enregistrer à la suite du documen Excel, Tu enlèves ces 4 lignes :
    Si tu ne veux pas supprimer les lignes, tu places 2 slash en début de ligne (comme avant Initialisation…).

    Code:

          // Initialisation du fichier Data.xls
            for (var j=0; j        var oFile=util.streamFromString(lesDonnees);
            this.setDataObjectContents(« Data.xls », oFile);

    J’ai pas compris la partie « si tu ne veux pas supprimer les lignes », en fait ce que je veux c’est ajouter a chaque fois au meme fichier (contenant deja une base d’informations) des lignes contenant les données exportés des nouveaux documents, pour qu’a chaque fois que j’ai un nouveau document, je puisse complèter mon fichier excel a l’aide de ton script.

    Une autre question (décidément  :siffle: ) comment je change le fiichier excel qui répertorie mes données? A chaque fois ça va dans le fichier data je n’arrive pas à exporter les données dans un fichier déjà existant.

    #64750
    bebarth
    Maître des clés

    J’ai pas compris la partie « si tu ne veux pas supprimer les lignes »

    Ce sont les lignes du script qu »il faut modifier comme ceci :

    Code:

          // Initialisation du fichier Data.xls
          // for (var j=0; j      // var oFile=util.streamFromString(lesDonnees);
          // this.setDataObjectContents(« Data.xls », oFile);

    ou les supprimer complètement.

    Une autre question (décidément  :siffle: ) comment je change le fiichier excel qui répertorie mes données? A chaque fois ça va dans le fichier data je n’arrive pas à exporter les données dans un fichier déjà existant.

    Regarde les icônes au dessus du fichier, tu peux ouvrir le fichier, l’enregistrer, l’exporter ou le supprimer et en importer un autre !!!
    @+
    :bonjour:

    #64751
    jeanrenov
    Membre

    Oui j’ai essayé ça mais ça me dis Au moins un nom de fichier doit être renseigné. Peut être parce que le fichier doit s’appeler data, si oui peut être puis je changer ça quelque part dans le script?

    #64752
    bebarth
    Maître des clés

    Oui, il faut remplacer 2 fois le nom de fichier Data.xls par le nom de ton fichier Excel.
    Attention, ça ne foctionne pas avec l’extension .xlsx

    Code:

                    var oFile=this.getDataObjectContents(« Data.xls »);      //                 var lesDonnees=util.stringFromStream(oFile);
                    var lesDonnees=lesDonnees+ »rn »;
                    for (var j=0; j                var oFile=util.streamFromString(lesDonnees);
                    this.setDataObjectContents(« Data.xls », oFile);          // …

    @+
    :bonjour:

    #64753
    jeanrenov
    Membre

    Ah oui en effet mon fichier était en xlsx, et j’avais pas changé le script.
    Encore merci pour l’aide et le travail, logiquement j’ai tout ce qu’il me faut.
    Passez de bonnes fêtes!

    #64754
    Merlin
    Maître des clés

    Il m’a semblé que le fichier XLS incorporé dans l’exemple de bebarth est en réalité un fichier CSV (parce-que LibreOffice l’ouvre comme un CSV).
    Me trompe-je ?

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