Convertir liste xlsm ou csv

Étiquetté : ,

  • Convertir liste xlsm ou csv

    Posté par Thomas sur 14 juin 2023 à 8h36

    Bonjour la team

    J’ai une source de donnée qui s’actualise en générant (remplaçant) un fichier sur sharepoint. Les formats possibles sont uniquement xlsm ou csv… Ce fichier comporte 15 000 lignes et plus de 20 colonnes.

    Je cherche un moyen automatique pour pouvoir rendre compatible l’exploitation de toutes ces données avec Power Apps.

    Vous allez me dire si je suis sur la bonne piste ou pas mais l’idée serait de le convertir en list SharePoint et donc profité de la délégation sur power apps, pour le traitement par filtre.

    Malheureusement, pas aussi simple car il me semble que power automate ne gère que les listes excel en xlsx. J’ai bien vu certains Connecteurs avec licence mais est ce que c’est fiable et quand est il avec la protection des données ?

    Avez vous rencontrez ce genre de contrainte et si oui comment l’avez vous traitée ?

    Merci d’avance 😉

    PostID=RMWJYHlKeAtreGq

    DavidZed a répondu Il y a 7 mois, 3 semaines 1 Membre · 13 Réponses
  • 13 Réponses
  • DavidZed

    Membre
    14 juin 2023 à 9h40

    Hello Thomas ,

    Avec du XML, tu peux normalement le convertir en Json avec l’expression : json(xml(outputs('Source XML')))

    à mettre dans une action Parse JSON, générer le schéma et tu devrais retrouver un array avec tes données.

    CommentID=Xc9JkGrsW7fac39, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    14 juin 2023 à 12h25

    Salut DavidZed

    Mon fichier peut être soit en XLSM soit en CSV mais malheureusement pas en XML 😏

    CommentID=xD5QY9HEmvqP2D5, PostID=RMWJYHlKeAtreGq

  • DavidZed

    Membre
    14 juin 2023 à 12h59

    Au temps pour moi ! j’ai mal lu 😀

    Pour parser un CSV, c’est un peu plus complexe, voici un excellent Article qui propose également le package du flux : How to parse a CSV File to create a JSON array (tachytelic.net)

    Pour le fichier Xlsm: Classeur Excel avec macros, effectivement, on ne vois pas ces extensions de fichiers avec le connecteur Excel, toutefois, on peut récupérer les tables si on renseigne le file identifier dans le champ fichier.

    On peut récupérer le file identifier via une action Sharepoint : Get File metadata, il suffit ensuite de copier coller le file identifier généré dans l’action get rows Excel (l’action Sharepoint peut être supprimée ensuite) :

    CommentID=FFygiIPmaOp7jI6, PostID=RMWJYHlKeAtreGq

  • DavidZed

    Membre
    14 juin 2023 à 13h00

    Au temps pour moi ! j’ai mal lu 😀

    Pour parser un CSV, c’est un peu plus complexe, voici un excellent Article qui propose également le package du flux : How to parse a CSV File to create a JSON array (tachytelic.net)

    Pour le fichier Xlsm: Classeur Excel avec macros, effectivement, on ne vois pas ces extensions de fichiers avec le connecteur Excel, toutefois, on peut récupérer les tables si on renseigne le file identifier dans le champ fichier.

    On peut récupérer le file identifier via une action Sharepoint : Get File metadata, il suffit ensuite de copier coller le file identifier généré dans l’action get rows Excel (l’action Sharepoint peut être supprimée ensuite) :

    CommentID=82b6URN1v4Yy5lK, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    14 juin 2023 à 13h19

    Super 😃

    Je teste ça des que possible.

    Encore une fois, merci pour ton aide ainsi que pour le maintien de ce support full french 👍

    CommentID=nyMIYPukXQ9snbs, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    19 juin 2023 à 7h06

    Hello,

    Petit état de l’avancement et vu que j’ai encore besoin d’aide… 😁

    Les solutions de David m’ont bien débloquée, mais j’ai ensuite rencontré d’autres difficultés que j’ai pu surmonter (avec un peu de fierté…).

    La première a été la limitation des 5000 ligne de ma licence Office 365 : grâce à ce tuto, j’ai pu créer une boucle “Exécuter jusqu’à” pour faire une lecture de manière récursive par lot.

    La seconde a été le délai astronomique pour traiter l’ensemble des 15 000 lignes, que ce soit pour la création des éléments que pour leurs mises à jour. Ce tuto a permis de faire un traitement par lot de 1000 en utilisant REST API. Une suppression des éléments en amont se fait avec le même procédé, ce qui permet d’avoir toutes les données à jour sans doublon.

    Le flux marche super bien et il permet de traiter les 15000 lignes en un temps record : environ 15 minutes pour la suppression et environ 15 minutes pour la création.

    Maintenant, j’aimerais aller un peu plus loin et rajouter des valeurs d’une autre liste dans une nouvelle colonne de la liste SharePoint avec ce même flux. Toutes mes listes Excel possèdent et ID commun ce qui devrait permettre de rendre la chose possible (enfin, je pense)

    Etant donnée que j’apprends et que je comprend qu’à moitié (de mieux en mieux) ce que j’ai déjà fait, je bloque sur cette étape !

    Voila la partie du flux concerné :

    L’autre liste comporte autant de ligne et j’ai du coup essayé de faire “Obtenir une ligne” avec comme filtre mon ID (ARTNO) commun, mais je n’arrive pas à intégrer la sortie à ma carte “GenerateSPData”

    Si c’est possible, oubliez pas que je suis novice 😉

    Thx

    CommentID=zAD0oTJANzE2TWx, PostID=RMWJYHlKeAtreGq

  • DavidZed

    Membre
    19 juin 2023 à 7h25

    Bonjour Thomas ,

    J’ai lu un peu en diagonale ton problème, à première vue, le soucis c’est que ton action est hors de ta boucle “appliquer à chacun”

    Tu as besoin de renseigner une valeur d’un record, or si tu es hors de ta boucle, celle-ci ne va te proposer que des arrays.

    Du coup il va te falloir explorer plusieurs pistes :

    • Soit ta boucle n’est pas nécessaire, et elle a été générée automatiquement car l’entrée de l’action est un array : dans ce cas si on est sûr qu’il n’y aurra qu’un seul record, il suffira d’ajouter un [0] à l’expression

    • Soit la boucle for each est nécessaire et alors il est impératif que les actions qui vont appeler la sortie soient dans la même boucle 🙂

    CommentID=Q1h4VdEriaOC77T, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    19 juin 2023 à 8h17

    Merci ,

    La boucle a en effet été générée automatiquement…

    Pour ta première piste, il peut y avoir plusieurs Record dans ma seconde liste excel mais il m’en faut que un retourné associé à toutes les lignes de ma première liste excel. Tu peux développer le [0] de l’expression car si je déplace le bloc “Obtenir une ligne” en dehors du “Appliquer à chacun” il me dit :

    Cette action ne peut pas être déplacée en dehors de l’instruction foreach, car elle dépend d’une action à l’intérieur de cette instruction.

    CommentID=8Mg2jV8naOq1Tc7, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    19 juin 2023 à 8h50

    Pour ta seconde piste, il me met toujours la même valeur pour chaque ligne créer sans doute du au fait qu’il traite par lot… 168 est la valeur trouvée en fonction du premier ID de la première liste mais il répète cette valeur pour toutes les lignes suivantes sans rechercher la nouvelle valeur associée à l’ID

    En gros, je veux récupérer la valeur d’une colonne d’une deuxième liste en recherchant l’ID en commun et donc l’ajouter à mon processus de création d’élément dans sharepoint

    Désolé, c’est vraiment pas évident à expliquer surtout quand on à pas les meme notions et donc langage 🤕

    CommentID=9kY21HogtJ9ybfO, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    20 juin 2023 à 7h53

    Vous pensez que c’est une piste intéressante :

    Car je n’arrive pas à le reproduire dans mon flux 🤒

    CommentID=JkasCDE6wODd5um, PostID=RMWJYHlKeAtreGq

    • R3dKap

      Membre
      21 juin 2023 à 8h45

      Thomas mon avis est que tu es en train de mettre en place une usine à gaz parce-qu’à priori tu n’as pas encore eu l’occasion de suivre la suggestion de DavidZed de déplacer tes actions Condition et Create SharePoint Items à l’intérieur de la boucle Appliquer à chacun comme indiqué sur sa capture :

      Si dans ton GenerateSPData tu veux exploiter chacune des occurrences de Obtenir une ligne qui est dans Appliquer à chacun, il faut qu’il soit à l’intérieur de la boucle, pas le choix… enfin, si y’a toujours le choix mais après tu t’embarques dans des galères pas possibles…

      Est-ce que tu as essayé de déplacer ces actions à l’intérieur de la boucle ?

      Est-ce que tu peux nous mettre une capture de ta dernière version actuelle ?

      SubCommentID=hF21YbSsQ9DhNKG, CommentID=JkasCDE6wODd5um, PostID=RMWJYHlKeAtreGq

  • Thomas

    Membre
    21 juin 2023 à 13h21

    Hello et merci pour ton intervention,

    J’ai effectivement testé les suggestions mais elles n’ont pas aidées au je me suis mal pris. Le fait de déplacé faisait une boucle dans une boucle et me copier plusieurs fois les mêmes valeurs.

    Tu as raison, je vais rester sur le basique fonctionnel et plutôt utiliser le même modèle de flux pour mes autres listes… Power apps fera les croisement 😏

    Merci à vous deux

    CommentID=qk97TNZ7bWP0LEx, PostID=RMWJYHlKeAtreGq

    • DavidZed

      Membre
      21 juin 2023 à 13h49

      C’est LE truc relou avec power automate… Quand il crée automatiquement des For Each dès qu’une sortie est un array.

      Mais faut pas ce méprendre, le problème ce n’est pas cette fonctionnalité, qui est plutôt bien pensée, le soucis, c’est qu’on a pas, pour chaque action, deux options selon ce qu’on souhaite récupérer : un array ou un record.

      A l’usage on s’y fait : Quand une boucle est générée là où il ne faut pas…

      • On copie l’expression

      • on supprime la boucle et l’action

      • on recrée l’action

      • on ajoute [0] dans l’expression, exemple : body(‘Action Source’)?[‘value’][0]?[‘Nom de la colonne’]

      SubCommentID=3EeIohIvQATvGg0, CommentID=qk97TNZ7bWP0LEx, PostID=RMWJYHlKeAtreGq

Connectez-vous pour répondre.