excel - NPOI 有时只能从电子表格中读取 10 行

标签 excel oracle filestream npoi

问题:我遇到了故障排除的难题,希望得到有关检查内容的建议,以解决我正在处理的网站遇到的问题。使用 NPOI (C#) 从电子表格读取数据时,有时(并非总是)行读取会在十行后停止。

很抱歉这篇文章很长,但不确定什么有用/没用。在这里发帖的主要原因是我不知道向伟大的 Google 机器提出正确的问题。

我有一个 Intranet 站点,我正在其中读取 XLSX 文件并将其内容推送到 Oracle 表中。从主题行可以看出,我正在使用 NPOI。在大多数情况下,它只是工作,但只是有时...

在 Oracle 中,我有一个临时表,该表已被截断,并且应该填充电子表格中的数据。

在我的应用程序 (ASPX) 中,用户将电子表格上传到服务器(这可以正常工作),然后应用程序调用一个 WebMethod 来截断 Oracle 临时表中的数据(这可以正常工作),然后调用另一个 WebMethod,即应该从电子表格中读取数据并加载临时表(这,有点工作)。

这就是我需要帮助的“有点作品”。

电子表格有 170 个数据行。当我在 VS 中运行该应用程序时,它大多数时候会读取/写入所有 170 条记录,但有时它只读取 10 条记录。当我从网络服务器运行该应用程序时,第一次失败(无法捕获特定错误),第二次及随后的时间,它仅从电子表格中读取十条记录并成功加载所有十条记录。我检查了上传到服务器的文件,确实有170条数据记录。

无论进程读取 10 条记录还是 170 条记录,都没有错误消息,也没有任何迹象表明为什么在 10 条记录后就停止读取。 (我会在这里提到,今天的文件有 170 个,但明天可能有 180 或 162,所以它没有修复)。

所以,我已经描述了它应该做什么以及它实际在做什么。我认为现在是代码片段的时候了。

        /* snowSource below is the path/filename assembled separately */
        /* SnowExcelFormat below is a class that basically maps row data with a specific data class  */

        IWorkbook workbook;
        try
        {
            using (FileStream file = new FileStream(snowSource, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                workbook = WorkbookFactory.Create(file);
            }
            var importer = new Mapper(workbook);                
            var items = importer.Take<SnowExcelFormat>(0);
            /* at this point, item should have 170 rows but sometimes it contains only 10 with no indication why */
            /* I don't see anything in the workbook or importer objects that sheds any light on what's happening. */

同样,从 VS 运行时,大多数情况下这都可以正常工作。这告诉我这是可行的代码。在 Web 服务器上运行此程序时,我第一次尝试该过程时失败,但随后它运行,但只获取前 10 条记录,忽略其余记录。此外,读取的所有数据(10 或 170)都成功插入到临时表中,这告诉我 Oracle 对数据、其格式和此过程完全没问题。我所需要的只是弄清楚为什么我的代码没有从 Excel 读取所有数据。

我已经多次验证本地 DLL 和网络服务器 DLL 是相同的。我正在读取同一个 Excel 文件。

我在这里遇到了严重的障碍,并且对于如何在代码失败时排除故障的想法已经用尽。我不知道是否存在限制 FileStream 对象可用内存的因素,导致它过早停止读取文件 - 并且没有遇到任何看起来像资源限制器的东西。我不知道是否存在限制 importer.Take 方法拉取的行数的因素。如有任何建议,我们将不胜感激。

最佳答案

我在某些文件上遇到了同样的问题,在分析问题后,这对我有用。

importer.Take<SnowExcelFormat>(0)有三个参数,其中之一是 maxErrorRows 。它的默认值为 10。

当遇到超过 10 个错误时,解析就会停止,然后函数就会停止读取。

你要做的就是设置maxErrorRows而不是采用默认值 10。

enter image description here

关于excel - NPOI 有时只能从电子表格中读取 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71803623/

相关文章:

c++ - 阻止通过 ifstream 对象从 FIFO 读取

c++ - 使用输入文件流 C++ 初始化对象的构造函数

Python:如何使用 xlwt 编写复数到 Excel?

php - 使用 fputcsv 将 BOM 添加到 CSV 文件

excel - 如何格式化剪贴板中的行和列以像从 Excel 中一样粘贴?

oracle - Unix 时间戳到 ISO-8601 字符串

oracle - 数据仓库中的星型模式与雪花型模式?

database - 我应该对表进行分区/子分区吗?

excel - 来自多个电子表格的数据透视表

c# - 使用<audio>将wav文件流式传输到Ipad和Firefox