Использование OpenXmlReader

Я ненавижу прибегать к StackOverflow для чего-то столь (на первый взгляд) простого, но последние несколько часов я боролся с Microsoft и, похоже, зашел в тупик. . Я пытаюсь читать (большие) электронные таблицы Excel 2007+, и Google любезно сообщил мне, что использование OpenXml SDK является довольно популярным выбором. Поэтому я попробовал, прочитал несколько руководств, проверил страницы собственной библиотеки Microsoft и получил от них очень мало.

Я использую небольшую тестовую таблицу, состоящую всего из одного столбца чисел и одного столбца строк — масштабное тестирование будет позже. Я пробовал несколько реализаций, подобных той, которую я собираюсь опубликовать, и ни одна из них не читала данные. Приведенный ниже код в основном был взят из другого потока StackOverflow, где он, похоже, работал, но не для меня. Я решил попросить вас, ребята, проверить/отладить/помочь с этой версией, потому что она, скорее всего, будет менее сломанной, чем все, что я написал сегодня.

static void ReadExcelFileSAX(string fileName)
    {
        using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, true))
        {
            WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();

            OpenXmlPartReader reader = new OpenXmlPartReader(worksheetPart);
            string text;
            string rowNum;
            while (reader.Read())
            {
                if (reader.ElementType == typeof(Row))
                {
                    do
                    {
                        if (reader.HasAttributes)
                        {
                            rowNum = reader.Attributes.First(a => a.LocalName == "r").Value;
                            Console.Write("rowNum: " + rowNum); //we never even get here, I tested it with a breakpoint
                        }

                    } while (reader.ReadNextSibling()); // Skip to the next row
                    Console.ReadKey();
                    break; // We just looped through all the rows so no need to continue reading the worksheet
                }
                if (reader.ElementType == typeof(Cell))
                {

                }

                if (reader.ElementType != typeof(Worksheet)) // Dont' want to skip the contents of the worksheet
                    reader.Skip(); // Skip contents of any node before finding the first row.
            }
            reader.Close();
            Console.WriteLine();
            Console.ReadKey();
        }
    }

И кстати, есть ли хорошие альтернативы использованию OpenXml SDK, которые я почему-то пропустил?

14
задан Argent 11 May 2012 в 16:50
поделиться