Использование OpenXmlReader
Я ненавижу прибегать к StackOverflow для чего-то столь (на первый взгляд) элементарного, но я боролся с Microsoft последние несколько часов и, похоже, зашел в тупик. Я пытаюсь читать (большие) таблицы Excel 2007+, и Google любезно сообщил мне, что использование OpenXml SDK является довольно популярным выбором. Поэтому я попробовал эту штуку, прочитал несколько учебных пособий, проверил собственные страницы библиотеки Microsoft и получил от них очень мало.
Я использую небольшую тестовую электронную таблицу с одним столбцом чисел и одной строкой - масштабное тестирование будет позже. Я пробовал несколько реализаций, похожих на ту, которую я собираюсь опубликовать, и ни одна из них не считала данные. Приведенный ниже код был в основном взят из другого потока StackOverflow, где он, похоже, работал - не для меня. Я рассчитывал, что вы, ребята, проверите / debug / help с этой версией, потому что она, вероятно, будет менее сломанной, чем все, что я написал сегодня.
<code>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(); } } </code>
И, кроме того, есть ли хорошие альтернативы использованию OpenXml SDK, которые я как-то пропустил?