let GetSheetTable = (tblSource as table, anySheetName as any, optional intSheetNum as nullable number) as table => let intSheet = if intSheetNum = null then 0 else intSheetNum, // Преобразуем список объектов в список имен листов // ToDo: добавить сортировку для листов/именованных таблиц или сделать обработку именованных таблиц отдельно SheetNames = Table.Column(tblSource, "Name"), // Функция для поиска первого совпадения по имени FindSheetByName = if Value.Is(anySheetName, type text) then if List.Contains(SheetNames, anySheetName) then Table.SelectRows(tblSource, each [Name] = anySheetName){0}[Data] else null else if Value.Is(anySheetName, type list) then let ExistingNames = List.Intersect({anySheetName, SheetNames}), SheetData = if List.Count(ExistingNames) > 0 then Table.SelectRows(tblSource, each [Name] = ExistingNames{0}){0}[Data] else null in SheetData else null, // Если по имени не найдено, возвращаем по номеру Result = if FindSheetByName <> null then FindSheetByName else if intSheet >= 0 and intSheet < Table.RowCount(tblSource) then tblSource{intSheet}[Data] else error "Не удалось подобрать лист" in Result in GetSheetTable