【问题标题】:NPOI: xlsx with non empty cells read as only having null rowsNPOI:具有非空单元格的 xlsx 读取为只有空行
【发布时间】:2017-03-02 23:59:22
【问题描述】:

像这样使用 NPOI:

static void xlsx()
    {
        XSSFWorkbook xsswb;
        using (FileStream file = new FileStream(@"test.xlsx", FileMode.Open, FileAccess.Read))
        {
            xsswb = new XSSFWorkbook(file);
        }

        ISheet sheet = xsswb.GetSheet("SheetOne");
        for (int row = 0; row <= 200; row++)
        {
            if (sheet.GetRow(row) != null) //null is when the row only contains empty cells 
            {
                for (var cell = 0; cell < 11; cell++)
                {
                    var cellvalue = sheet.GetRow(row).GetCell(cell);
                    if (cellvalue != null)
                    {

                        Console.WriteLine(string.Format("Row {0} {1} = {2}", row, cell, cellvalue.ToString()));
                    }
                    else
                    {
                        Console.WriteLine("null");
                    }
                }

            }
        }
    }

在一个特定的非空工作簿上,我没有在控制台上写入结果:返回的每一行都是空的。

如果我创建一个新的 xlsx,填充它,然后用这段代码打开它,一切正常。其他xlsx开得很好。问题必须与我必须导入的 xlsx 的特定格式有关。 (我不能在这里分享,因为它包含保留信息)

如果我用 Excel 打开 test.xslx 文件,另存为,xlsx 文件,上面的代码运行良好。 (文件大小从37kb增长到69kb)

如果我在 test.xls 中重命名 test.xlsx 并使用 HSSFWorkbook,NPOI 正确地抱怨该文件确实是 2007+ excel 文件,我应该改用 XSSFWorkBook

我无法更改源 excel 文件,因为它是由工具生成的,我的用户应该在没有任何修改的情况下使用它。

有什么想法吗? 谢谢。

【问题讨论】:

  • 您遇到问题的工作簿是否实际上有一个名为“SheetOne”的工作表?如果它有不同的名称,例如“Sheet1”,那么您的循环将不会运行。
  • @BrianRogers 实际上它会在sheet.GetRow(row) 产生一个异常,因为工作表为空。
  • @pomarc 您的代码应该可以工作。 “在特定的非空工作簿上” 是什么意思?您创建的 excel 文件与您正在谈论的工具生成的源 excel 之间有什么区别?
  • @krlzlx 是的,这就是我的意思。抱歉,措辞不佳的评论。
  • 何布赖恩,当然有那张纸。事实上,如果它没有,它就会成为一个例外。我从 SAP 中提取了另一个 excel,它只能读取到第 5 行,然后所有后续行都显示为空,即使有数据。我找不到在 NPOI 和 excelreader 中导入它的方法,但我成功使用了 EPPLUS。可能 SAP 创建的文件中有一些错误,有些读者会忽略,有些则不会。

标签: c# excel npoi


【解决方案1】:

我找不到用 NPOI 阅读那些有趣的优秀作品的方法。我改用了epplus

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2022-09-30
    相关资源
    最近更新 更多