如何在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
相关产品推荐
相关产品推荐

