如何使用 Power Query 从 SharePoint 库中的(许多)文档中获取数据

Posted

技术标签:

【中文标题】如何使用 Power Query 从 SharePoint 库中的(许多)文档中获取数据【英文标题】:How to get data from within (many) documents in SharePoint library with Power Query 【发布时间】: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 = UnhiddenSheets0[Data],
        Column = Table.SelectColumns(Sheet,Text.Combine("Column",Number.ToText(col))),
        Cell = Record.Field(Columnrow-1,  Text.Combine("Column",Number.ToText(col)) )
    in
        Cell
in
    Source

【问题讨论】:

【参考方案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_sheet0[Column1]
    in
        Column1
in
    Source

【讨论】:

这行得通,谢谢。我还参数化了行和列以获得额外的灵活性。尽管对于我作为新手来说,这是一种痛苦的行为,因为显然标识符不能是连接的字符串。所以Cell = Sheet0["Column" & Number.ToText(col)] 没用。耻辱。 Power Query 对我来说是一种令人困惑的编程语言。

以上是关于如何使用 Power Query 从 SharePoint 库中的(许多)文档中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何提取金蝶软件数据到power query

如何使用 Power Query 的 Web.Contents 发布多部分/表单数据

从 Power Query 中的单元格值中提取数据类型?

如何从 Power Query 的不同表中的 2 列中获取数据以汇总为 1 列?

powerquery可以上载部分表格吗

power query如何实现增加空白行