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