在power查询高级编辑器中从另一个excel提取数据

oknrviil  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(231)

我试图从另一个excel文件中提取数据,但我试图使它dinamyc.这是上下文,所以我提取不同城市的调查数据,问题是相同的,但每个城市的数据是不同的,所以我试图为每个城市创建可视化,但只是替换文件中的数据,因此,该数据导出为一个文件,我们可以将其命名为"results-city.xlsx",我的目标是将此文档与另一个具有相同名称和列但每列中的响应明显不同的文档放在一起,我试图使用电源查询和高级编辑器,这是我的公式,但没有获得成功,也将是动态的路径,这就是我在公式中包括文件夹的原因。请帮助实现这一点

let
    Source = Excel.Workbook(File.Contents("C:\Users\iotal\OneDrive\Desktop\stack\folder\results-city.xlsx"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}})
in
    #"Changed Type"

更新2:

    • 我想要的输出**是将数据导入Excel的工作表中,该工作表不介意文件夹中包含两个数据中的哪一个,但可以更新。

这是我想要的图像输出:图1是我将导入的第一个数据

第二个图像是当我替换city2的数据时,应该如下所示,只是将该文件替换为另一个名称相同的文件

不起作用的是公式,它不能将数据作为表格导入工作表
当我从city1替换文件从city2我得到这个错误:

ua4mk5z4

ua4mk5z41#

在powerquery中,类似这样的操作将合并指定硬编码目录中所有xlsx文件中的所有选项卡

let Source = Folder.Files("C:\subdirectory\directory"),
#"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".xlsx")),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Name", "Content"}),
#"Added Custom" = Table.AddColumn(#"Removed Other Columns", "GetFileData", each Excel.Workbook([Content],true)),
#"Expanded GetFileData" = Table.ExpandTableColumn(#"Added Custom", "GetFileData", {"Data", "Hidden", "Item", "Kind", "Name"}, {"Data", "Hidden", "Item", "Kind", "Sheet"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded GetFileData",{"Content", "Hidden", "Item", "Kind"}),
List = List.Union(List.Transform(#"Removed Columns"[Data], each Table.ColumnNames(_))),
#"Expanded Data" = Table.ExpandTableColumn(#"Removed Columns", "Data", List,List)
in  #"Expanded Data"

或者,为单元格指定一个范围名称,如excel中的path,然后将文件路径放入该单元格,如C:\temp\a.xlsx
然后在powerquery中,使用该范围名代替硬编码文件名,如

let location= Excel.CurrentWorkbook(){[Name="path"]}[Content]{0}[Column1],
Source = Excel.Workbook(File.Contents(location), null, true),                           
...

第二种方法假设选项卡名称是常量。2否则我推荐第一种方法
如果需要,您可以将这两种方法结合使用

c2e8gylq

c2e8gylq2#

要使文件夹位置相对于命名范围为“file_path”(B2,在/here下)的单元格是动态的,请修改其中一个文件/位置(此处为“C:\temp\Folder1\File1.txt”)的普通功率查询数据导入,如下所示:

普通电源查询:

let
    Source = Csv.Document(File.Contents("C:\temp\Folder1\File1.txt"),[Delimiter="   ", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
in
    #"Promoted Headers"

更新的电源查询:

let
    MyFolder = Excel.CurrentWorkbook(){[Name="file_path"]}[Content][Column1]{0},
    Source = Csv.Document(File.Contents(MyFolder),[Delimiter="  ", Columns=3, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
in
    #"Promoted Headers"

即,[Name =”XYZ“]中的文件名XYZ替换为变量MyFolder,定义如下:

MyFolder = Excel.CurrentWorkbook(){[Name="file_path"]}[Content][Column1]

(可选)
包含VB代码,以便在指定范围(“file_path”)的单元格(即gif上方的单元格B2)中的下拉列表每次发生变化时刷新查询-如下所示:* (您不必这样做--例如,您可以通过与查询关联的属性UI轻松地使查询可定期刷新).. *

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("file_path")) Is Nothing Then
    Application.ScreenUpdating = False
    Calculate
    ActiveWorkbook.Connections("Query - dynamic_file").Refresh
    Application.ScreenUpdating = True
    Calculate
    
    
End If

End Sub

Cristiano Galvão的荣誉(here)了解更多详情回复:动态链接(按上述)。

相关问题