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

不使用连接字符串将Excel转换为DataTable并绑定GridView的问题咨询

问题解答

是否存在无需连接字符串的实现方案

存在,你当前选用的第三方Excel操作类库(如Infragistics Excel、EPPlus、NPOI等)都属于无需OLEDB/ODBC连接字符串的方案,直接读取Excel文件二进制内容解析即可,无需依赖数据库连接逻辑。

代码抛出System.NullReferenceException的原因及修复方案

核心错误点

  • 静态方法Workbook.Load(stream)会返回Workbook实例,你仅调用了方法但没有赋值给声明的workbook变量,导致后续访问workbook.Worksheets(0)时变量为空
  • 你错误使用GetManifestResourceStream读取用户本地选择的文件:该方法仅用于读取编译时嵌入到程序集内部的资源文件,无法读取用户在磁盘上选中的普通文件,导致stream为null,Load方法直接抛出空异常,且你用空Catch块吞掉了异常无法定位问题
  • 单元格值可能为空,直接调用.ToString()会触发空引用
  • 你尝试将自定义类ISAACServiceExcel的实例直接赋值给DataTable变量,类型不匹配,且循环中没有往DataTable中添加行的逻辑,就算前面运行正常也无法完成绑定

修正后代码

If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    Dim filePath = OpenFileDialog1.FileName
    If File.Exists(filePath) AndAlso Path.GetExtension(filePath).Equals(".xlsx", StringComparison.OrdinalIgnoreCase) Then
        ' 直接从磁盘文件加载Workbook,不需要读取资源流
        Dim workbook As Workbook = Workbook.Load(filePath)
        Dim sheet As Worksheet = workbook.Worksheets(0)
        
        ' 先构建DataTable的列
        Dim dataTable As New DataTable()
        dataTable.Columns.AddRange({
            New DataColumn("AufPos"),
            New DataColumn("UANR"),
            New DataColumn("K_Art"),
            New DataColumn("Ueberbegriff"),
            New DataColumn("Benennung"),
            New DataColumn("Einheit"),
            New DataColumn("Einzelkosten"),
            New DataColumn("Anzahl"),
            New DataColumn("Komponente"),
            New DataColumn("Projektbeteiligter"),
            New DataColumn("Chefblattposition"),
            New DataColumn("Total")
        })
        
        ' 循环行往DataTable加数据,如需跳过表头可自行调整起始索引
        For Each row As WorksheetRow In sheet.Rows
            Dim newRow = dataTable.NewRow()
            ' 加空值判断避免空引用
            newRow("AufPos") = If(row.Cells(0).Value?.ToString(), "")
            newRow("UANR") = If(row.Cells(1).Value?.ToString(), "")
            newRow("K_Art") = If(row.Cells(2).Value?.ToString(), "")
            newRow("Ueberbegriff") = If(row.Cells(3).Value?.ToString(), "")
            newRow("Benennung") = If(row.Cells(5).Value?.ToString(), "")
            newRow("Einheit") = If(row.Cells(6).Value?.ToString(), "")
            newRow("Einzelkosten") = If(row.Cells(7).Value?.ToString(), "")
            newRow("Anzahl") = If(row.Cells(8).Value?.ToString(), "")
            newRow("Komponente") = If(row.Cells(9).Value?.ToString(), "")
            newRow("Projektbeteiligter") = If(row.Cells(11).Value?.ToString(), "")
            newRow("Chefblattposition") = If(row.Cells(13).Value?.ToString(), "")
            newRow("Total") = If(row.Cells(15).Value?.ToString(), "")
            dataTable.Rows.Add(newRow)
        Next
        
        dgv1.DataSource = dataTable
    End If
End If

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:03