【发布时间】:2015-08-20 18:12:48
【问题描述】:
使用打开的 xml 读取 Excel 文件时遇到问题 - 我希望我的程序读取所有行并显示数据。在遍历行程序的foreach循环中,随机数行数大于excel中写入内容的实际行数,并导致NullReferenceException。不应该是foreach“知道”什么时候停止吗?
var sharedStringTable = myWorkbook.WorkbookPart.SharedStringTablePart;
var definedNames = myWorkbook.WorkbookPart.Workbook.DefinedNames;
var worksheetPart = myWorkbook.GetWorksheetPartByName("Sheet1");
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();
int lala = 1;
var rows = worksheetPart.Worksheet.Descendants<Row>();
foreach (Row r in rows)
{
var val1 = worksheetPart.ReadCellContent(definedNames, sharedStringTable, string.Format("B{0}", lala));
lala++;
}
【问题讨论】:
-
NRE 发生在哪里?
-
Foreach 循环读取写入内容的最后一行,并在下一个循环中跳出(抛出异常)
-
但是异常指向哪一行和哪一项?
-
它被抛出以“var val1 = worksheetPart.ReadCe...”开头的行
-
你在那个循环中引用
r?这就是 foreach 的用途... foreach 不应仅用作计数器,这就是为什么您在foreach (Row r in rows)中声明该新变量的原因