当第一个单元格为空时,Filehelpers ExcelStorage.ExtractRecords失败

Seb*_*ian 5 vb.net asp.net excel filehelpers

当要使用ExcelStorage.ExtractRecords导入的Excel工作表的第一个单元格为空时,该过程将失败.IE浏览器.如果数据从第1行第2行开始,如果单元格(2,1)具有空值,则该方法失败.

有人知道如何解决这个问题吗?我已经尝试将FieldNullValue属性添加到映射类中,但没有运气.

是一个示例项目,显示有问题的代码

希望有人可以帮助我或指出一些方向.

谢谢!

Ran*_*ica 4

您似乎在 FileHelpers 中偶然发现了一个问题。

发生的情况是 ExcelStorage.ExtractRecords 方法使用空单元格检查来查看它是否已到达工作表的末尾。这可以在ExcelStorage.cs源代码中看到:

while (CellAsString(cRow, mStartColumn) != String.Empty)
{
    try
    {
        recordNumber++;
        Notify(mNotifyHandler, mProgressMode, recordNumber, -1);

        colValues = RowValues(cRow, mStartColumn, RecordFieldCount);

        object record = ValuesToRecord(colValues);
        res.Add(record);

    }
    catch (Exception ex)
    {
        // Code removed for this example
    }
}
Run Code Online (Sandbox Code Playgroud)


因此,如果任何行的起始列为空,则假定文件已完成。

解决这个问题的一些选项:

  1. 不要在第一列位置放置任何空单元格。
  2. 不要使用 Excel 作为文件格式 - 首先转换为 CSV。
  3. 看看是否可以从开发人员那里获取补丁或自己修补源代码。

前两个是解决方法(并不是很好的方法)。第三个选项可能是最好的,但是文件结束条件是什么?也许一整行都是空的就足够了(但即使这样也可能无法在所有情况下始终有效)。