PowerBI导入数据

let
    // 获取当前年份和前一年
    CurrentYear = Date.Year(DateTime.LocalNow()),
    PreviousYear = CurrentYear - 1,
     
    // 定义起始年份
    StartYear = 2022,
     
    // 生成需要读取的年份列表
    YearRange = List.Numbers(StartYear, PreviousYear - StartYear + 1),
     
    // 构建完整文件路径列表
    SourceFiles = List.Transform(
        YearRange,
        each "\\ccnnsvs115fls01\APP01\POWERBI\JL032_Sales_Flash\salesflash_" & Text.From(_) & ".xlsx"
    ),
     
    // 定义函数:尝试读取单个Excel文件
    ImportExcel = (filePath as text) =>
        let
            Result = try
                let
                    // 读取Excel文件
                    Source = Excel.Workbook(File.Contents(filePath), null, true),
                    // 尝试获取第一个工作表的数据(更通用的方式)
                    SheetData = if Table.HasColumns(Source, "Item") then
                        let
                            FirstSheet = Table.First(Source),
                            Data = if Record.HasFields(FirstSheet, "Data") then FirstSheet[Data] else null
                        in
                            Data
                    else null,
                    
                    // 如果获取数据失败,尝试直接访问Sheet1
                    Data = if SheetData = null then 
                        try Source{[Item="Sheet1",Kind="Sheet"]}[Data] otherwise null
                    else SheetData,
                    
                    // 检查数据是否为表格
                    ValidData = if Data is table then Data else null,
                    
                    // 从文件路径提取年份
                    Year = Text.BetweenDelimiters(filePath, "salesflash_", ".xlsx"),
                    
                    // 如果数据有效,添加年份列
                    WithYear = if ValidData <> null then 
                        Table.AddColumn(ValidData, "DataYear", each Year, type text)
                    else null
                in
                    WithYear
            otherwise 
                // 如果文件不存在或读取失败,返回一个空表而不是null
                #table({"DataYear"}, {})
        in
            Result,
     
    // 过滤掉空表
    NonEmptyTables = List.Select(List.Transform(SourceFiles, ImportExcel), each _ <> null and Table.RowCount(_) > 0),
     
    // 读取所有文件并合并
    CombinedData = if List.Count(NonEmptyTables) > 0 then Table.Combine(NonEmptyTables) else #table({"DataYear"}, {}),
     
    // 确保列类型一致(可选步骤)
    EnforcedTypes = Table.TransformColumnTypes(
        CombinedData,
        {
            // 示例:{"Column1", type text}, {"Column2", Int64.Type}
            // 根据你的实际列名和类型添加
        }
    )
in
    EnforcedTypes

  

posted @ 2025-05-14 14:29  CrossPython  阅读(5)  评论(0)    收藏  举报