read xlsx by power query

该脚本读取指定文件夹中的非隐藏.xlsx文件,合并所有工作表的数据,并根据需要删除头部行。如果提供了列名,则选择这些列;否则,自动检测列名。最后,根据参考值决定使用哪种结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(path as text, colnames as list, n_delrows as number, ref as number)=>let
    resource = Folder.Files(path),
    seldata = Table.SelectRows(resource, each ([Attributes][Hidden] = false and [Extension] = ".xlsx")),
    a = 
    let
        readxlsx = Table.SelectColumns(
            Table.TransformColumns(seldata, {"Content", each 
                Table.SelectRows(Excel.Workbook(_), each [Kind]="Sheet")
            }),
        {"Name", "Content"}),
        content = Table.SelectRows(
            Table.ExpandTableColumn(readxlsx, "Content", {"Name", "Data"}, {"SheetName", "Data"}),
        each Table.IsEmpty([Data]) = false),
        selcontent = Table.TransformColumns(content, {"Data", each 
            Table.PromoteHeaders(
                Table.RemoveFirstN(_, n_delrows)
            )
        }),
        namelist = if List.IsEmpty(colnames) = true 
            then List.Distinct(
                List.Combine(
                    List.Transform(selcontent[Data], each Table.ColumnNames(_))
                )
            )
            else colnames,
        expdata = Table.ExpandTableColumn(selcontent, "Data", namelist, namelist)
    in
        expdata,
    b =
    let
        readxlsx = List.Select(
            List.Combine(
                List.Transform(seldata[Content], each 
                    Table.SelectRows(Excel.Workbook(_), each [Kind]="Sheet")[Data]
                )
            ), (x)=> Table.IsEmpty(x)=false
        ),
        selcols = List.Transform(readxlsx, each
            if List.IsEmpty(colnames) = true
            then Table.PromoteHeaders(
                Table.RemoveFirstN(_, n_delrows)
            )
            else
                try Table.SelectColumns(
                    Table.PromoteHeaders(
                        Table.RemoveFirstN(_, n_delrows)
                    ),
                colnames)
                otherwise Table.PromoteHeaders(
                    Table.RemoveFirstN(_, n_delrows)
                )
        ),
        comfiles = Table.Combine(selcols)
    in 
        comfiles,
    result = if ref = 0 then b else a
in
    result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值