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

VB.NET读取Excel多工作表指定列数据并加载到ListView控件

解决方案

核心调整逻辑

  • 保留原有单工作表读取函数的基础上,新增循环遍历1~10名称工作表的逻辑,逐个读取后合并所有数据
  • 调整查询语句直接筛选A列(对应字段名F1)和C列(对应字段名F3),无需读取无关列
  • 新增DataTable合并逻辑,最后统一绑定到ListView控件

完整实现代码

Imports System.Data.OleDb

Public Class Frm_ImportarLibro
    ' 原有单工作表读取函数,调整为直接读取A、C列
    Public Function Obtenerdatos(ByVal ruta As String, ByVal hoja As String, ByVal rango As String) As DataTable
        ' 兼容xlsx格式可更换为以下连接字符串:
        ' Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0 Xml;HDR=NO';" & "Data Source=" & ruta
        Dim cadenaConexion As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO';" & _
                                       "Data Source=" & ruta

        Using cnn As New OleDbConnection(cadenaConexion)
            Dim cmd As OleDbCommand = cnn.CreateCommand()
            ' 仅查询A列(F1)和C列(F3),提升读取效率
            cmd.CommandText = String.Format("SELECT F1,F3 FROM [{0}${1}]", hoja, rango)
            Dim da As New OleDbDataAdapter(cmd)
            Dim dtTemp As New DataTable("Prueba")
            da.Fill(dtTemp)
            Dim dt As DataTable = dtTemp.Clone()
            Dim rows As DataRow() = dtTemp.Select()

            For index As Integer = 0 To rows.Count - 1
                Dim row As DataRow = rows(index)
                If (row.Item(0) Is DBNull.Value) Then
                    Exit For
                End If
                dt.ImportRow(row)
            Next
            Return dt
        End Using
    End Function

    ' 新增批量读取1~10工作表的函数
    Public Function ObtenerDatosTodasHojas(ByVal ruta As String, ByVal rango As String) As DataTable
        ' 初始化最终返回的合并数据表,结构和单表读取结果一致
        Dim dtFinal As New DataTable()
        dtFinal.Columns.Add("F1", GetType(String))
        dtFinal.Columns.Add("F3", GetType(String))
        ' 循环读取1~10共10个工作表
        For i As Integer = 1 To 10
            Dim dtHoja = Obtenerdatos(ruta, i.ToString(), rango)
            ' 合并当前工作表数据到总表
            For Each dr As DataRow In dtHoja.Rows
                dtFinal.ImportRow(dr)
            Next
        Next
        Return dtFinal
    End Function

    ' 绑定数据到ListView的方法,调用示例
    Public Sub BindDataToListView(rutaArchivo As String)
        ' 读取所有表的A1:A20、C1:C20范围数据
        Dim dtDatos = ObtenerDatosTodasHojas(rutaArchivo, "A1:C20")
        ' 先清空ListView原有内容
        ListView1.Items.Clear()
        ListView1.Columns.Clear()
        ' 设置ListView为详细视图
        ListView1.View = View.Details
        ' 添加列头,可根据需求修改名称
        ListView1.Columns.Add("A列数据", 150)
        ListView1.Columns.Add("C列数据", 150)
        ' 遍历DataTable填充ListView
        For Each dr As DataRow In dtDatos.Rows
            Dim item As New ListViewItem(dr("F1").ToString())
            item.SubItems.Add(dr("F3").ToString())
            ListView1.Items.Add(item)
        Next
    End Sub
End Class

使用说明

  • 只需调用BindDataToListView方法,传入Excel文件的完整路径即可自动完成所有工作表数据读取和ListView绑定
  • 如果工作表名称不是纯数字1~10,可自行修改ObtenerDatosTodasHojas里的循环逻辑,替换为实际的工作表名称列表
  • 若使用的是.xlsx格式的Excel文件,替换函数里注释给出的ACE引擎连接字符串即可兼容更高版本Office

内容的提问来源于stack exchange,提问作者Joe R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:03