我正在使用LinqToExcel轻松地将Excel数据导入SQL Server。
var fileName = ConfigurationManager.AppSettings["ExcelFileLocation"];
var excel = new ExcelQueryFactory(fileName);
var employees = excel.Worksheet<Employee>().ToList();
一切都很好,只有一个问题,字段完全映射到数据库表字段,在数据库中它们不是NULL。
话虽如此,如果你看一下Excel文件的这个截图,第3行下面的一些行实际上并不是空的。没有空格,但不知何故LinqToExcel也会读取它们,当然我会被EntityFramework抛出异常,说该字段不能为空。
我需要选择3以下的所有空白行,最多8980个,并删除它们。 只有这样我才能使用LinqToExcel而不是尝试导入空行。
知道如何解决问题吗?
感谢。
答案 0 :(得分: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();
答案 1 :(得分:0)
但LinqToExcel也以某种方式读取它们
这是Excel的怪癖。它会记住当Sheet处于最大尺寸时使用的行数和列数。您可以通过键入Ctrl-End来查看。这将选择最后使用的行和列中的单元格。
Office支持介绍了如何重置上一个单元格:Locate and reset the last cell on a worksheet
基本上,您删除多余的行和列,清除格式,保存工作簿并重新打开它。
如果您有等待导入的Excel文件并且没有时间部署固定的Linq2Excel客户端,则此解决方法可能很有用。