C# MVC导入Excel后DataTable JS显示1000条多余空行问题求助
问题解决方法
问题原因
使用OLEDB读取Excel数据时,会将Excel文件中曾经编辑过、后续又清空内容的行也识别为有效数据行,所以会查询出大量全空的行,导致前端渲染后出现多余的空数据。
解决步骤
步骤1:调整Excel连接字符串配置
在你的web.config文件中,修改两个Excel连接字符串,添加空行过滤相关参数:
- .xls(Excel 2003及以下版本)连接字符串示例:
<add name="Excel03ConString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;MaxScanRows=0'" />
- .xlsx(Excel 2007及以上版本)连接字符串示例:
<add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;MaxScanRows=0'" />
参数说明:
HDR=Yes:标识Excel第一行为表头,不会被识别为数据行IMEX=1:将混合数据类型的列统一识别为文本,避免类型识别错误MaxScanRows=0:扫描全表数据判断列类型,避免前几行就判定类型导致后续数据读取异常
步骤2:后端读取数据后过滤全空行(最稳妥方案)
在控制器代码中,odaExcel.Fill(dtSheet);执行完成后,添加如下代码移除全空数据行:
// 收集所有全空的行 List<DataRow> emptyRows = new List<DataRow>(); foreach (DataRow row in dtSheet.Rows) { bool isRowEmpty = true; // 检查行内所有单元格是否都为空 foreach (var cellValue in row.ItemArray) { if (cellValue != DBNull.Value && !string.IsNullOrWhiteSpace(cellValue.ToString())) { isRowEmpty = false; break; } } if (isRowEmpty) { emptyRows.Add(row); } } // 移除空行 foreach (DataRow emptyRow in emptyRows) { dtSheet.Rows.Remove(emptyRow); } dtSheet.AcceptChanges();
执行完上述操作后,再将dtSheet添加到DataSet返回给视图即可。
可选补充:调整查询语句过滤
如果你确定Excel中某一列属于必填字段,也可以直接修改查询SQL过滤空行,例如:
cmdExcel.CommandText = "SELECT * From [" + sheetName + "] WHERE [必填列名] IS NOT NULL";
内容的提问来源于stack exchange,提问作者Sigit Budi
相关产品推荐
相关产品推荐

