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

如何在VB.NET的DataGridView中导出选中的多行数据到Excel

DataGridView勾选行导出Excel调整方案

你当前代码的逻辑是导出手动高亮选中的行,要实现导出勾选chkCheck复选框的行,仅需修改行遍历部分的逻辑即可。
示例图

核心调整点

  • 替换原有SelectedRows遍历逻辑,改为遍历所有行,逐行判断复选框的勾选状态
  • 增加空值校验,避免复选框未赋值时抛出空引用异常

修改后完整代码

Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
    Dim xlApp As Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkSheet As New Excel.Worksheet
    Dim misValue As Object = System.Reflection.Missing.Value
    Dim excelLocation As String = ""


    If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
        excelLocation = FolderBrowserDialog1.SelectedPath & "\Export-" & Format(Now(), "MMMM-dd-yyyy_hh-mm-ss") & ".xlsx"
        xlApp = New Excel.Application
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets(1)

        'Export Header Names Start
        Dim columnsCount As Integer = DataGridView1.Columns.Count - 6
        For k As Integer = 1 To DataGridView1.Columns.Count - 6
            xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
        Next
        'Export Header Name End


        'Export Each Row Start 以下为修改后的逻辑
        Dim i As Integer = 0
        ' 遍历所有行,替代原来的SelectedRows遍历
        For Each row As DataGridViewRow In DataGridView1.Rows
            ' 跳过新行模板(如果DataGridView允许添加新行的话)
            If row.IsNewRow Then Continue For
            ' 判断chkCheck复选框是否勾选,增加空值判断
            Dim checkCellValue = row.Cells("chkCheck").Value
            If checkCellValue IsNot DBNull.Value AndAlso CBool(checkCellValue) = True Then
                Dim columnIndex As Integer = 0
                Do Until columnIndex = columnsCount
                    xlWorkSheet.Cells(i + 2, columnIndex + 1).Value = row.Cells(columnIndex).Value.ToString
                    columnIndex += 1
                Loop
                i += 1
            End If
        Next
        'Export Each Row End

        xlWorkSheet.SaveAs(excelLocation)
        xlWorkBook.Close()
        xlApp.Quit()


        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)
        ' 可选:导出成功提示
        MsgBox("导出成功,文件路径:" & excelLocation, MsgBoxStyle.Information, "提示")

    Else
        MsgBox("保存已取消", MsgBoxStyle.Critical, "警告")
    End If
End Sub

注意事项

  • 如果你实际的复选框列名不是chkCheck,请替换为你自己的列名,也可以直接用列索引取值(比如row.Cells(0).Value,0为复选框列的索引)
  • 原代码中columnsCount = DataGridView1.Columns.Count - 6的逻辑是排除末尾6列,如果你需要排除开头的复选框列,可自行调整计数规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:27:04