private void LoadSpreadsheetDocument(SpreadsheetDocument dSpreadsheet) { if (dSpreadsheet.CustomFilePropertiesPart != null) { foreach (var m in dSpreadsheet.CustomFilePropertiesPart.Properties.Elements <CustomDocumentProperty>()) { String name = m.Name.Value; if (m.VTLPWSTR != null) { Properties.AddCustomProperty(name, m.VTLPWSTR.Text); } } } WorkbookPart workbookPart = dSpreadsheet.WorkbookPart; XlSharedStringsTable stringTable = new XlSharedStringsTable(workbookPart, null); var sheets = dSpreadsheet.WorkbookPart.Workbook.Sheets; foreach (Sheet dSheet in sheets.OfType <Sheet>()) { var sheetName = dSheet.Name; var wsPart = dSpreadsheet.WorkbookPart.GetPartById(dSheet.Id) as WorksheetPart; if (wsPart != null) { XlWorksheet ws = Worksheets.AddWorksheet(sheetName); using (var reader = OpenXmlReader.Create(wsPart)) { // We ignore lots of parts. Type[] ignoredElements = new Type[] { typeof(SheetFormatProperties), typeof(SheetViews), typeof(MergeCells), typeof(AutoFilter), typeof(SheetProtection), typeof(DataValidations), typeof(ConditionalFormatting), typeof(Hyperlinks), typeof(PrintOptions), typeof(PageMargins), typeof(PageSetup), typeof(HeaderFooter), typeof(RowBreaks), typeof(Columns), typeof(ColumnBreaks), typeof(LegacyDrawing), typeof(CustomSheetViews) // Custom sheet views contain its own auto filter data, and more, which should be ignored for now }; while (reader.Read()) { while (ignoredElements.Contains(reader.ElementType)) { reader.ReadNextSibling(); } if (reader.ElementType == typeof(Row)) { AddRow(ws, stringTable, (Row)reader.LoadCurrentElement()); } else if (reader.ElementType == typeof(SheetProperties)) { AddSheetTabColor(ws, (SheetProperties)reader.LoadCurrentElement()); } } reader.Close(); } } } }