簡體   English   中英

在 power query 高級編輯器中從另一個 excel 中提取數據

[英]extract data from another excel in power query advanced editor

我試圖從另一個 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:

數據示例: 帶有數據城市 1 的文件 下面是一個來自兩個城市的數據示例 帶有數據城市 2 的文件,當我嘗試使用公式時,冪查詢不會將數據導入 excel。

我想要的 output是將數據導入到 excel 的工作表中,不介意文件夾中的哪一個,但可以更新。

這是我想要的帶有圖像的 output:圖像 1 是我要導入的第一個數據在此處輸入圖像描述

第二張圖片是當我替換 city2 的數據時應該看起來像這樣只是將文件替換為另一個具有相同名稱的文件在此處輸入圖像描述

不起作用的是不將數據作為表格導入工作表的公式

當我將 city1 中的文件替換為 city2 中的文件時,出現此錯誤:

在此處輸入圖像描述

在 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 中的路徑,並將您的文件路徑放入該單元格中,例如C:\temp\a.xlsx

然后在 powerquery 中,使用該范圍名稱代替硬編碼文件名,例如

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

第二個替代方案假定選項卡名稱是常量。 否則我推薦第一種方法

如果你願意,你可以結合這兩種選擇

要使文件夾位置相對於具有命名范圍“file_path”(B2,下方/此處)的單元格動態,請修改文件/位置之一的普通電源查詢數據導入(此處為“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]

示例文件 - 鏈接


(選修的)

每次在具有命名范圍(“file_path”)的單元格(即 gif 上方的單元格 B2)中的下拉列表更改時,包括 VB 代碼以刷新查詢 - 如下:(您不必這樣做 - 您可以很容易地例如,通過與查詢關聯的屬性 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(此處)了解更多詳細信息 RE:上面的動態鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM