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

如何将DataTable作为DataGrid的ItemsSource实现Excel导入展示

ClosedXML加载Excel到DataGrid解决方案

报错根因

Empty extension is not supported报错是由于你调用ImportExceltoDataTable时传入了占位符"..."作为文件路径,未使用OpenFileDialog选中的真实文件路径,ClosedXML无法识别无效的文件后缀触发报错。同时原有代码存在语法笔误、参数未生效等问题,一并修正如下:

1. 修正后按钮点击事件代码

OpenFileDialog of = new OpenFileDialog();
of.Filter = "Excel Files | *.xlsx";
of.Title = "导入Excel文件";

if (of.ShowDialog() == true) 
{
    // 传入选中的真实文件路径,第二个参数可指定工作表名,也可按需调整方法入参
    dataGrid.ItemsSource = ImportExceltoDataTable(of.FileName, "Sheet1").DefaultView;
}

2. 修正后Excel转DataTable方法

public static DataTable ImportExceltoDataTable(string filePath, string sheetName) 
{
    using (XLWorkbook wb = new XLWorkbook(filePath)) 
    {
        // 若不需要指定工作表名,可直接保留取第一个工作表的逻辑,也可使用入参sheetName
        IXLWorksheet ws = wb.Worksheet(sheetName);
        DataTable dt = new DataTable();

        bool firstRow = true;
        // 仅遍历有数据的行,跳过空行避免无效循环
        foreach (IXLRow row in ws.RowsUsed()) 
        {
            if (firstRow) 
            {
                foreach (IXLCell cell in row.CellsUsed()) 
                {
                    dt.Columns.Add(cell.CachedValue.ToString());
                }
                firstRow = false;
            } 
            else 
            {
                dt.Rows.Add();
                int i = 0;
                foreach (IXLCell cell in row.CellsUsed()) 
                {
                    // 修正原有语法笔误:将]写成了}
                    dt.Rows[dt.Rows.Count - 1][i] = cell.CachedValue.ToString();
                    i++;
                }
            }
        }
        return dt;
    }
}

补充注意事项

  • 请确保WPF的DataGrid控件已配置AutoGenerateColumns="True"属性,可自动匹配DataTable的列生成表格结构
  • 如果需要兼容.xls格式的旧版Excel文件,需额外安装NuGet包ClosedXML.ExcelReader
  • 若Excel存在特殊格式、空值、合并单元格等场景,可按需扩展字段类型转换、空值处理逻辑

内容的提问来源于stack exchange,提问作者Ole M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:36:04