Beispiel #1
0
        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();
                    }
                }
            }
        }