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
    Participant

    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 38 réponses de 1 à 38 (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
    Participant

    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
    Participant

    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
    Participant

    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
    Participant

    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
    Participant

    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
    Participant

    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
    Participant

    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
    Participant

    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
    Participant

    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 ?

    #64755
    jeanrenov
    Participant

    Utilisant excel c’est un bien un fichier xls chez moi.
    Ah vraiment la dernière question, y’a t’il un moyen d’exporter les données meme si un champs n’est pas remplis? Afin de respecter a chaque fois le meme format d’exportation des donnes pour que ça corresponde aux titres du fichier excel?

    #64756
    bebarth
    Maître des clés

    bonjour,
    Dans mon exemple j’ai créé un fichier sous Excel enregistré au format .xls (j’avais fait un teste au format .xlsx pour vérifier si ça fonctionnait aussi, mais non…).
    Peut-être qu’une fois attaché au formulaire, Acrobat le transforme en .csv !!!
    @+
    :bonjour:

    #64757
    Merlin
    Maître des clés

    Je crois plutôt que c’est LibreOffice qui est myope.
    J’essaierai avec Excel…
    :geek:

    #64758
    bebarth
    Maître des clés

    y’a t’il un moyen d’exporter les données meme si un champs n’est pas remplis? Afin de respecter a chaque fois le meme format d’exportation des donnes pour que ça corresponde aux titres du fichier excel?

    Code:
    for (var j=0; j  if (otherDoc.getField(lesChamps[j]).value==””) {
          var lesDonnees=lesDonnees+”–t”;
      } else {
          var lesDonnees=lesDonnees+otherDoc.getField(lesChamps[j]).value+”t”;
      }
    }

    @+
    :bonjour:

    #64759
    frataxx
    Membre

    Bonjour,

    je rebondis sur ce sujet très intéressant car je souhaiterais reprendre les valeurs de mes radio boutons et j’obtiens la valeur “off” peu importe si ce dernier est coché.
    Une idée ? :Euuuh:

    #64760
    bebarth
    Maître des clés

    bonjour,
    Je pense qu’il faudrait que tu partage ton fichier, car ça ne me parait pas possible…
    @+
    :bonjour:

    #64761
    frataxx
    Membre

    En fait, j’ai un fichier PDF dans lequel j’ai des valeurs que je reprends(comme le matricule par ex) mais également des radio boutons ici ex Charge, j’ai 4 choix possibles donc 4 boutons appelés respectivement par leur chiffre.
    J’essaye de reprendre la valeur du radio bouton sélectionné dans mon tableur, mais je n’y parviens pas, j’obtiens OFF comme dans la capture ci-dessous.  :doute:

    #64762
    bebarth
    Maître des clés

    Sans savoir comment tu procèdes, je ne peux pas te dire !
    @+
    :bonjour:

    #64763
    frataxx
    Membre

    Je procède simplement avec la méthode présentée dans ce topic avec le fichier “exporter les champs vers excel.pdf”

    #64764
    frataxx
    Membre

    Re, j ai reussi à faire fonctionner mes radios boutons, en revanche je ne parviens pas a traiter plus de 50 fichiers, j’ai beau eplucher le javascript je ne trouve pas…

    #64765
    bebarth
    Maître des clés

    bonjour,
    Peut-être le même souci que pour ce post : https://abracadabrapdf.net/forum/index.php/topic,3165.55.html
    “There’s a bug in some versions of Acrobat DC that causes the closeDoc method to not work. Try updating to the latest version available. If that doesn’t work you’ll need to look for a workaround.” https://community.adobe.com/t5/acrobat/you-reached-the-maximum-number-of-files-that-can-be-opened/m-p/10801060?page=1#M232639
    Mais sans voir, je ne peux pas te dire !
    @+
    :bonjour:

    #64766
    frataxx
    Membre

    Bonjour,j’utilise comme base ton fichier d’export de pdf vers excel que j’ai interfacé mais cela reviens au meme, en essayer d’exporter 100 fichiers pdf dans mon excel seul 49 le sont, j ai lu tes autres postes et cela ne semble pas ressemble car ici on ne produit pas de pdf comme en publipostage, amoins qu ils ne se ferment pas à l’extraction des données, et qu’ acrobate limit a 50 fichiers?

    #64767
    bebarth
    Maître des clés

    bonjour,
    Toujours la même réponse pour moi !!! Sans voir ton fichier il m’est très difficile de comprendre pourquoi…
    Il y a apparemment un bug sur la gestion de la mémoire de certaines versions d’Acrobat qui limite le nombre de fichiers ouverts (comme indiqué dans les liens précédents).
    Par contre, il y a peut-être moyen d’écrire le script différemment… va savoir !!!
    @+ :bonjour:

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