3

我正在使用 LinqToExcel 轻松地将 Excel 数据导入 SQL Server。

        var fileName = ConfigurationManager.AppSettings["ExcelFileLocation"];
        var excel = new ExcelQueryFactory(fileName);
        var employees = excel.Worksheet<Employee>().ToList();

一切都很好,只有 1 个问题,字段完全映射到数据库表字段,并且在数据库中它们不是 NULL。

输入excel文件

话虽如此,如果你看这个 Excel 文件的截图,第 3 行下面的一些行实际上不是空的。没有空格,但不知何故 LinqToExcel 也会读取它们,当然我得到 EntityFramework 抛出的异常,说该字段不能为空。

我需要选择 3 到 8980 以下的所有空白行,然后删除它们。只有这样我才能使用 LinqToExcel 而不是尝试导入空白行。

知道如何解决问题吗?

谢谢。

4

2 回答 2

4

您可以向 LINQ 语句添加条件,以便不包括空行。

var employees = excel.Worksheet<Employee>().Where(x => x.VS2012 != null).ToList();

如果检查 not null 不起作用,那么您可以检查空字符串

var employees = excel.Worksheet<Employee>().Where(x => x.VS2012 != "").ToList();
于 2013-02-06T22:43:33.560 回答
1

但不知何故 LinqToExcel 也会读取它们

这是 Excel 的一个怪癖。它会记住当工作表处于最大尺寸时使用了多少行和多少列。您可以通过键入 Ctrl-End 来查看。这将选择曾经使用过的最后一行和最后一列中的单元格。

Office 支持描述如何重置最后一个单元格:找到并重置工作表上的最后一个单元格

基本上,您删除多余的行和列,清除格式,保存工作簿并重新打开它。

如果您有等待导入的 Excel 文件并且没有时间部署固定的 Linq2Excel 客户端,则此解决方法可能很有用。

于 2016-12-06T12:09:11.687 回答