【问题标题】:Powerquery: how to import multiple text files from a folder in separate columns in the same excel sheetPowerquery:如何从同一个Excel工作表中不同列的文件夹中导入多个文本文件
【发布时间】:2016-12-21 14:33:33
【问题描述】:

我想将一个文件夹中的多个文本文件(每个文件包含两列)导入到一个 Excel 工作表中,以便每个新文件都从一个新列开始。理想情况下,我需要第一个文件中的两列,每个附加文本文件中只需要第二列。 在powerquery中,我尝试使用“从文件夹导入(导入文件夹中的文件的元数据和链接)”功能,然后使用查询编辑器并扩展二进制文件,结果是每个新文件都附加在前一个文件的末尾.但我希望每个文件都在同一张工作表中开始一个新列,但我不知道该怎么做。

我怎样才能直接 powerquery 做到这一点? 在此先感谢您的帮助!

【问题讨论】:

    标签: excel import text-files powerquery


    【解决方案1】:

    我的建议包括通过高级编辑器添加的 2 个相当困难的步骤,但它在文件夹中 .txt 文件的数量方面是动态的。我添加了大量的 cmets,所以它应该是不言自明的。

    /*  In this query, .txt files from a folder are combined.
    Each source file has 2 columns.
    The resulting table consists of both columns from the first file and each second column from the other files.
    Tables are joined using each first column as key and with a left outer join
    It is assumed that each file has column headers in the first row, that the first column header is the same for each file
        and, preferably, the second column header differs per file, although this is not necessary.
    This query is tested with the following file contents:
    
    File1.txt:
        ID,File1
        1,A
        2,B
        3,C
        4,D
    
    File2.txt:
        ID,File2
        1,W
        2,X
        3,Y
    
    Another file was added later on, to test for .txt files being added to the folder: works fine!
    */    
    
    let
    // Standard UI:
    Source = Folder.Files("C:\Users\Marcel\Documents\Forum bijdragen\StackOverflow Power Query\Multiple files in 1 folder"),
    
    // Standard UI; step renamed
    FilteredTxt = Table.SelectRows(Source, each [Extension] = ".txt"),
    
    // Standard UI; step renamed
    RemovedColumns = Table.RemoveColumns(FilteredTxt,{"Name", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}),
    
    // UI add custom column "FileContents" with formula Csv.Document([Content]); step renamed
    AddedFileContents = Table.AddColumn(RemovedColumns, "FileContents", each Csv.Document([Content])),
    
    // Standard UI; step renamed
    RemovedBinaryContent = Table.RemoveColumns(AddedFileContents,{"Content"}),
    
    // In the next 3 steps, temporary names for the new columns are created ("Column2", "Column3", etcetera)
    // Standard UI: add custom Index column, start at 2, increment 1
    #"Added Index" = Table.AddIndexColumn(RemovedBinaryContent, "Index", 2, 1),
    
    // Standard UI: select Index column, Transform tab, Format, Add Prefix: "Column"
    #"Added Prefix" = Table.TransformColumns(#"Added Index", {{"Index", each "Column" & Text.From(_, "en-US"), type text}}),
    
    // Standard UI:
    #"Renamed Columns" = Table.RenameColumns(#"Added Prefix",{{"Index", "ColumnName"}}),
    // Now we have the names for the new columns
    
    // Advanced Editor: create a list with records with FileContents (tables) and ColumnNames (text) (1 list item (or record) per txt file in the folder)
    // From this list, the resulting table will be build in the next step.
    ListOfRecords = Table.ToRecords(#"Renamed Columns"),
    
    // Advanced Editor: use List.Accumulate to build the table with all columns, 
    // starting with Column1 of the first file (Table.FromList(ListOfRecords{0}[FileContents][Column1], each {_}),)
    // adding Column2 of each file for all items in ListOfRecords.
    BuildTable = List.Accumulate(ListOfRecords,
                                 Table.FromList(ListOfRecords{0}[FileContents][Column1], each {_}),
                                 (TableSoFar,NewColumn) => 
                                  Table.ExpandTableColumn(Table.NestedJoin(TableSoFar, "Column1", NewColumn[FileContents], "Column1", "Dummy", JoinKind.LeftOuter), "Dummy", {"Column2"}, {NewColumn[ColumnName]})),
    
    // Standard UI
    #"Promoted Headers" = Table.PromoteHeaders(BuildTable)
    
     in
    
        #"Promoted Headers"
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多