Record.HasFields или проверка наличия защиты листов книги

#АнатомияФункций - Record.HasFields



Всем привет!

Поскольку мне уже неоднократно задали этот вопрос пишу разбор. Итак задача: надо проверить на всех ли листах в файлах папки стоит «правильная» защита. Правильность в себя включает наличие пароля и возможности сортировки и фильтрации данных. Соответственно, если где-то это не так – нужно вывести список негодников.

Ну ОК, вот код:

let

f=(x)=>[

file = Binary.Buffer(x),

book = Table.SelectRows(Excel.Workbook(file,false),(r)=>r[Kind]="Sheet"),

xml = Table.SelectRows(fxUnzip(file),(r)=>Text.Contains(r[Name],"xl/worksheets/sheet"))[Value],

f=(x)=>Record.HasFields(Xml.Tables(x){[Name="sheetProtection"]}?[Table]?{0}? ?? [],{"Attribute:hashValue","Attribute:sheet","Attribute:sort","Attribute:autoFilter"}),

lst = List.Transform(xml,f),

tbl = Table.FromColumns(Table.ToColumns(book)&{lst},Table.ColumnNames(book)&{"protection"})][tbl],

folder=Folder.Files("путь к папке")[[Folder Path],[Name],[Content]],

tr = Table.TransformColumns(folder,{"Content",f}),

exp = Table.ExpandTableColumn(tr,"Content",{"Item","protection"}),

to = Table.SelectRows(exp,(r)=>r[protection]=false)

in

to


Ну а что тут к чему – смотрим на ютубе

Лайк, коммент, подписка приветствуются )))



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

Всех благ!

@buchlotnik