Раскидываем иерархию через List.Generate

#АнатомияФункций – List.Generate



Всем привет!



Несколько раз вопрос всплывал в чате и я уже давал образчики кода, но захотелось записать видос – как всегда, на Ютубе.



Код вышел несложный, складываю сюда, чтобы можно было поиском находить

let

from = Excel.CurrentWorkbook(){[Name="Источник"]}[Content],

lst = List.Buffer(Table.ToList(from,(x)=>x)),

max = List.Max(from[уровень]),

n = List.Count(lst),



gen=List.Generate(

()=>[i=0,j=lst{i},l=List.ReplaceRange(List.Repeat({null},max),j{0}-1,1,{j{1}})&List.Skip(j,2)],

(x)=>x[i]<n,

(x)=>[i=x[i]+1,j=lst{i},l=List.FirstN(x[l],j{0}-1)&{j{1}}&List.Repeat({null},max-j{0})&List.Skip(j,2)],

(x)=>if (lst{x[i]+1}?{0}? ?? 0)>x[j]{0} then null else x[l]

),



nms = List.Transform({1..max},(x)=>"заголовок "&Text.From(x))&List.Skip(Table.ColumnNames(from),2),

to=Table.FromList(List.RemoveNulls(gen),(x)=>x,nms)

in

to




Ну а объяснение по ссылке - смотрим, подписываемся, ставим лайк, пишем комменты. )))



Надеюсь, было полезно.

Всех благ!

@buchlotnik