Мне не нравится прибегать к 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, который я как-то пропустил?