Получаем форматы для ячеек - жирный шрифт, жёлтая заливка и т.д.

#АнатомияФункций - Xml.Tables, Xml.Document



Всем привет!

Пришло время ответить на вопрос - можно ли получить данные только из ячеек, залитых жёлтым, или с красным шрифтом, или жирным и т.п. Глобально – можно., но…

Получилось долго, потому как там всё непросто - так что решайте сами, надо ли вам оно )))

Вот код:

let

file = File.Contents("путь/файл.xlsx"),

unz = fxUnzip(file),

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

style = Xml.Tables(unz{[Name="xl/styles.xml"]}[Value]),

cellstyle=Table.Buffer(style{[Name="cellXfs"]}[Table]{0}[xf]),

font=style{[Name="fonts"]}[Table]{0}[font],

fill=style{[Name="fills"]}[Table]{0}[fill],

n=1,

sheet=book{n-1}[Data],

sheetdata=Xml.Document(unz{[Name="xl/worksheets/sheet"&Text.From(n)&".xml"]}[Value]){0}[Value]{[Name="sheetData"]}[Value],

f=(x)=>Number.From(x{0}[Attributes]{[Name="s"]}?[Value]?),

tr=Table.TransformColumns(sheetdata,{{"Attributes",(x)=>x{[Name="r"]}[Value]},{"Value",f}}),

dict=Record.FromList(tr[Value],tr[Attributes]),

min=List.Min(List.Transform(tr[Attributes],Number.From)),

add=Table.AddIndexColumn(sheet,"row",min),



tr1=Table.TransformColumns(add,{"row",(x)=>Record.FieldOrDefault(dict,Text.From(x))}),

tr2=Table.TransformColumns(tr1,{"row",(x)=>if x=null then null else cellstyle{x}}),

tr3=Table.TransformColumns(tr2,{"row",(x)=>[a=Number.From(x[#"Attribute:fontId"]?),b=if a=null then null else font{a}[b]][b]}),

skip = Table.PromoteHeaders(Table.Skip(tr3,(r)=>r[Column7]=null)),

to = Table.SelectRows(skip, each ([Column8] = ""))

/*цвет шрифта - tr3=Table.TransformColumns(tr2,{"row",(x)=>[a=Number.From(x[#"Attribute:fontId"]?),b=if a=null then null else font{a}[color]{0}[#"Attribute:rgb"]?][b]})

цвет заливки - tr3=Table.TransformColumns(tr2,{"row",(x)=>[a=Number.From(x[#"Attribute:fillId"]?),b=if a=null then null else fill{a}[patternFill][fgColor]?{0}?{0}?[#"Attribute:rgb"]?][b]})*/

in

to


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

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



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

Всех благ!

@buchlotnik