【问题标题】:How to get data from within (many) documents in SharePoint library with Power Query如何使用 Power Query 从 SharePoint 库中的(许多)文档中获取数据
【发布时间】:2021-02-02 16:24:19
【问题描述】:

此处为 Power BI 初级

如何从 SharePoint 列表中查看每个 Excel 文件并从预定义的单元格中提取内容。

我目前正在访问一些包含 .xlsx 文件的 Intranet Sharepoint 库,并且我正在使用这些文件的元数据进行一些报告。例如,一个库包含 10 个 excel 文件,因此我可以绘制出上传者、上传时间以及分配到的 wat 类别的图表...

但是,Power Query 有没有办法查看每个文件,从 Excel 的单元格 A1 中获取值,然后将其添加为新列“CellA1Content”?即,根据文件内容制作您自己的元数据,并将它们添加到导入的元数据表中。

我发现了一些我可能需要的功能:

File.Contents
Excel.CurrentWorkbook

但是,如果可能的话,我对 Power Query 的了解还不够,无法将它们组合在一起。我将不得不进行某种类型的 foreach 操作。

编辑:解决方案

这行得通。我在 excel 中选择了第一个非隐藏工作表,并且我还制作了函数,以便我可以传递列号和行号。

主要查询:

let
    Source = SharePoint.Contents("http://mysharepoint", [Implementation=null, ApiVersion=15]),
    ... ... ...
    
    //Open each excel and get cell D5
    #"AddedColumn1" = Table.AddColumn(#"Filtered Rows", "AddedColumn1", each GetCellContent([Content],4,5))
in
    AddedColumn1

Power BI 中的空白查询,称为 GetCellContent:

let
    Source = (binaryParameter,col,row) => let
        Source = Excel.Workbook(binaryParameter, null, false),
        UnhiddenSheets = Table.SelectRows(Source, each if [Hidden]=false and [Kind]="Sheet" then true else false),
        Sheet = UnhiddenSheets{0}[Data],
        Column = Table.SelectColumns(Sheet,{Text.Combine({"Column",Number.ToText(col)})}),
        Cell = Record.Field(Column{row-1},  Text.Combine({"Column",Number.ToText(col)}) )
    in
        Cell
in
    Source

【问题讨论】:

    标签: sharepoint powerbi powerquery


    【解决方案1】:

    You'll need a Function used in a column like this.

    这是我对您的问题的本地解释,没有共享点。但是共享相同的逻辑。

    主查询

    let
        Source = Folder.Contents("YourDirectory"),
        #"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".xlsx")),
        #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Content", "Name"}),
        #"Added Custom" = Table.AddColumn(#"Removed Other Columns", "Row1Col1", each PullRow1Col1([Content]))
    in
        #"Added Custom"
    

    PullRow1Col1:

    let
        Source = (binaryParameter) => let
            Source = Excel.Workbook(binaryParameter, null, false),
            Sheet1_sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
            Column1 = Sheet1_sheet{0}[Column1]
        in
            Column1
    in
        Source
    

    【讨论】:

    • 这行得通,谢谢。我还参数化了行和列以获得额外的灵活性。尽管对于我作为新手来说,这是一种痛苦的行为,因为显然标识符不能是连接的字符串。所以Cell = Sheet{0}["Column" & Number.ToText(col)] 没用。耻辱。 Power Query 对我来说是一种令人困惑的编程语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多