Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Power Query Forumle Query récupérer le nom de propriété et l'insérer dans une colonne

Fanaouer

XLDnaute Nouveau
Bonjour,

Tout est dit dans le titre, j'ai beaucoup de requête qui vienne de plusieurs feuilles d'un classeur excel.

J'aimerais importer le nom de chaque feuille, donc le nom de la requête dans une colonne, car j'aimerais ensuite fusionner toute les requêtes.

Savez vous comment faire?

Merci d'avance
 

Marion G

XLDnaute Nouveau
Bonjour,
Je dois realiser la cartographie d'un dossier, en ajoutant les noms des differents auteurs des fichiers de ce dossier.
Les noms se trouvent sous "proprietes"- "details" -"origines"- "auteurs" mais comment ajouter cette information directement dans une colonne en face de chaque fichier avec Power query ?

Sachant que j'ai beaucoup de fichiers, il n'est pas imaginablale d'ajouter cette information manuellement.

Une idée ?
 

mromain

XLDnaute Barbatruc
Bonjour Marion, le forum,

J’arrive après la bataille et avec une solution partielle, mais tu trouveras ci-dessous une fonction qui permet d’extraire ces propriétés pour les fichiers au format Open XML - de la suite Office (docx, xlsm, ppsx).

La fonction GetOpenXmlFileCoreProps dézippe le fichier Open XML et récupère les propriétés à partir du fichier docProps/core.xml.
Le code permettant de dézipper vient d’ici.

Le code de la fonction GetOpenXmlFileCoreProps est le suivant :
Code:
let
    
    fn = (openXmlFileBinary as binary) as table =>
        let
        
            // unzip function source: https://github.com/ibarrau/PowerBi-code/blob/master/PowerQuery/ExtractZIP.pq
            UnzipFile = (ZIPFile as binary) =>
                let
                    Header = BinaryFormat.Record([      Signature            = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger32,ByteOrder.LittleEndian),
                                                        Version         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),
                                                        Flags             = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),
                                                        Compression         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),
                                                        ModTime         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),
                                                        ModDate         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),
                                                        CRC32             = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger32,ByteOrder.LittleEndian),
                                                        CompressedSize         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger32,ByteOrder.LittleEndian),
                                                        UncompressedSize     = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger32,ByteOrder.LittleEndian),
                                                        FileNameLen         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian),
                                                        ExtraFieldLen         = BinaryFormat.ByteOrder(BinaryFormat.UnsignedInteger16,ByteOrder.LittleEndian)
                                                    ]),
                
                    FileEntry = BinaryFormat.Choice(Header, each if _[Signature] <> 0x4034B50 then BinaryFormat.Null else
                                                             BinaryFormat.Record([
                                                                            Header           = _,
                                                                            FileName         = BinaryFormat.Text(_[FileNameLen]),
                                                                            ExtraField       = BinaryFormat.Text(_[ExtraFieldLen]),
                                                                            UncompressedData = BinaryFormat.Transform(BinaryFormat.Binary(_[CompressedSize]),(x) => try Binary.Buffer(Binary.Decompress(x, Compression.Deflate)) otherwise null)
                                                                            ]), type binary),
                    ZipFormat = BinaryFormat.List(FileEntry, each _<> null),    
                
                    Entries = List.Transform(
                            List.RemoveLastN( ZipFormat(ZIPFile), 1),
                        (e) => [FileName = e[FileName], Content = e[UncompressedData] ]
                    )
                in
                   Table.FromRecords(Entries),
        
            UnzipedFileTable = try UnzipFile(openXmlFileBinary) otherwise error "Source file is not an OpenXml file.",
            docPropsCoreBinary = try Table.SelectRows(UnzipedFileTable, each ([FileName] = "docProps/core.xml")){0}[Content] otherwise error "Source file is not an OpenXml file.",
            ContenuXml = Xml.Document(docPropsCoreBinary),
            Value = ContenuXml{0}[Value],
            SelectedColumns = Table.SelectColumns(Value,{"Name", "Value"})
        in
            SelectedColumns,
    
    DocumentationMetadata = 
        [
            Documentation.Name = "GetOpenXmlFileCoreProps",
            Documentation.Description = "This function extract 'core properties' of an OpenXml file (docx, xlsm, ppts, ...).", 
            Documentation.Examples = 
                {
                    [
                        Description = "Extract core properties of a .docx file:",
                        Code = "GetOpenXmlFileCoreProps(File.Contents(""c:\folder\document.docx"")",
                        Result = "Table with name and values of core properties."
                    ]
                }
        ]

in
    Value.ReplaceType(fn, Value.ReplaceMetadata(Value.Type(fn), DocumentationMetadata))

Ci-dessous un exemple d’utilisation :
Code:
let
    Source = Folder.Files("D:\TMP"),
    Filtre_FichiersOffice = Table.SelectRows(Source, each ([Extension] = ".docx" or [Extension] = ".dotm" or [Extension] = ".dotx" or [Extension] = ".pptx" or [Extension] = ".xlsm" or [Extension] = ".xlsx")),
    ColonneAjoutée_FileCoreProp = Table.AddColumn(Filtre_FichiersOffice, "CoreProperties", each GetOpenXmlFileCoreProps([Content]))
in
    ColonneAjoutée_FileCoreProp

A+
 

Discussions similaires

Réponses
14
Affichages
404
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…