You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:27:04