-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Labels
Description
Power-Query-Excel-Formats/RowsOutline/ExcelWorksheetsRowOutlines.pq
Lines 111 to 165 in 8909b10
| Source = Excel.Workbook(File.Contents(FullPath), false, true), | |
| // leave sheets only | |
| FilteredSheets = Table.SelectRows(Source, each ([Kind] = "Sheet")), | |
| // sheets in PQ initially in appearance order, i.e. sheets index (despite visibility) | |
| AddSheetsIndex = Table.AddIndexColumn(FilteredSheets, "Index", 1, 1), | |
| // check SheetNames parameter | |
| SheetNames = if SheetNames is text then {SheetNames} else if SheetNames is list then SheetNames else null, | |
| // filter sheets by name if provided | |
| FilteredByNames = if SheetNames = null or List.IsEmpty(SheetNames) then AddSheetsIndex else Table.SelectRows(AddSheetsIndex, each List.Contains(SheetNames, [Name])), | |
| // UnZip file | |
| UnZipped = Table.Buffer(fnUnZip(File.Contents(FullPath))), | |
| /* | |
| let | |
| Source = Folder.Files(Folder), | |
| file = Source{[Name = FileName, Folder Path = Folder & "\"]}[Content], | |
| UnZippedFile = Table.Buffer(fnUnZip(file)) | |
| in | |
| Table.Buffer(UnZippedFile), | |
| */ | |
| // relations id table for sheets | |
| workbook = | |
| let | |
| Source = UnZipped, | |
| Content = Source{[FileName ="xl/workbook.xml"]}[Content], | |
| ImportedXML = Xml.Tables(Content,null,TextEncoding.Utf8), | |
| sheetsTable = ImportedXML{[Name = "sheets"]}[Table], | |
| sheetTable = sheetsTable{[Name = "sheet"]}[Table], | |
| ExpandedRel = Table.ExpandTableColumn(sheetTable, "http://schemas.openxmlformats.org/officeDocument/2006/relationships", {"Attribute:id"}, {"Attribute:id"}), | |
| typed = Table.TransformColumnTypes(ExpandedRel,{{"Attribute:name", type text}, {"Attribute:sheetId", Int64.Type}, {"Attribute:id", type text}}) | |
| in | |
| typed, | |
| // sheets relations id to XML target files | |
| workbook_rels = | |
| let | |
| Source = UnZipped, | |
| Filtered = Table.SelectRows(Source, each [FileName]="xl/_rels/workbook.xml.rels"), | |
| GetXML = Table.TransformColumns(Filtered, {"Content", each Xml.Tables(_,null,65001)}), | |
| XMLContent = GetXML{0}[Content]{[Name="Relationship"]}[Table], | |
| FilteredSheetsRel = Table.SelectRows(XMLContent, each [#"Attribute:Type"] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"), | |
| Removed = Table.RemoveColumns(FilteredSheetsRel,{"Attribute:Type"}) | |
| in | |
| Removed, | |
| // merge relations id (via sheets name) | |
| MergedRelationsID = Table.Join(FilteredByNames, {"Name"}, workbook, {"Attribute:name"}), | |
| // join workbook relations | |
| MergedRelationsTarget = Table.Join(MergedRelationsID,{"Attribute:id"},workbook_rels,{"Attribute:Id"}), |