【问题标题】:Open xml reading incorrect data打开xml读取不正确的数据
【发布时间】: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) 中声明该新变量的原因

标签: c# excel openxml


【解决方案1】:

您从未在循环中引用 r。 foreach 不应仅用作计数器,这就是您在 foreach (Row r in rows) 中声明该新变量的原因。

基本上,您正在循环您的rows,但以任何方式调用/引用不属于r(您在当前迭代中循环的行)的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2014-05-30
    • 2022-11-11
    相关资源
    最近更新 更多