我讨厌求助于 StackOverflow 来做一些如此(看似)基本的事情,但在过去的几个小时里我一直在与 Microsoft 争吵,似乎走到了死胡同。我正在尝试阅读(大型)Excel 2007+ 电子表格,Google 亲切地告诉我,使用 OpenXml SDK 是一个非常受欢迎的选择。所以我试了一下,阅读了一些教程,检查了微软自己的库页面,但从它们中得到的很少。
我正在使用一个只有一列数字和一列字符串的小型测试电子表格 - 稍后将进行大规模测试。我已经尝试了几种类似于我即将发布的实现,但它们都没有读取数据。下面的代码主要取自另一个 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?