如何将 DataGridView 中的数据导入 EPPlus ExcelWorksheet
How to get the data in a DataGridView into an EPPlus ExcelWorksheet
我试过这段抛出强制转换异常的代码:
Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets.Add(pageTitle)
Dim dataTable As DataTable
dataTable = dataGridView.DataSource ' cast exception
异常:
System.InvalidCastException: Unable to cast object of type
'System.Windows.Forms.BindingSource' to type
'Microsoft.Office.Interop.Excel.DataTable'.
我需要一个DataTable
来设置工作表:
worksheet.Cells("A1").LoadFromDataTable(dataTable, True)
如果您不能将 DataSource
直接转换为 DataTable
,您可以使用以下例程将 DataGridView
中的可见数据提取到新的 DataTable
:
Public Function Dgv2Dtb(ByVal dgv As DataGridView) As DataTable
Dim dtbOutput As New DataTable
For intCol As Integer = 0 To dgv.Columns.Count - 1
Dim dgvc As DataGridViewColumn = dgv.Columns(intCol)
Dim dtyCol As System.Type = dgvc.ValueType
If dtyCol Is Nothing And dgvc.CellType.Name = "DataGridViewTextBoxCell" Then
dtyCol = GetType(String)
End If
Dim dclOutput As DataColumn = New DataColumn(dgvc.HeaderText, dtyCol)
dtbOutput.Columns.Add(dclOutput)
Next intCol
For intRow As Integer = 0 To dgv.Rows.Count - 1
Dim drwNew As DataRow = dtbOutput.NewRow()
Dim dgvr As DataGridViewRow = dgv.Rows(intRow)
For intCol As Integer = 0 To dgv.Columns.Count - 1
drwNew.Item(intCol) = dgvr.Cells(intCol).Value
Next intCol
dtbOutput.Rows.Add(drwNew)
Next intRow
Return dtbOutput
End Function
用法:
Dim dtbNew As DataTable = Dgv2Dtb(dgvMyDataGridView)
我试过这段抛出强制转换异常的代码:
Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets.Add(pageTitle)
Dim dataTable As DataTable
dataTable = dataGridView.DataSource ' cast exception
异常:
System.InvalidCastException: Unable to cast object of type 'System.Windows.Forms.BindingSource' to type 'Microsoft.Office.Interop.Excel.DataTable'.
我需要一个DataTable
来设置工作表:
worksheet.Cells("A1").LoadFromDataTable(dataTable, True)
如果您不能将 DataSource
直接转换为 DataTable
,您可以使用以下例程将 DataGridView
中的可见数据提取到新的 DataTable
:
Public Function Dgv2Dtb(ByVal dgv As DataGridView) As DataTable
Dim dtbOutput As New DataTable
For intCol As Integer = 0 To dgv.Columns.Count - 1
Dim dgvc As DataGridViewColumn = dgv.Columns(intCol)
Dim dtyCol As System.Type = dgvc.ValueType
If dtyCol Is Nothing And dgvc.CellType.Name = "DataGridViewTextBoxCell" Then
dtyCol = GetType(String)
End If
Dim dclOutput As DataColumn = New DataColumn(dgvc.HeaderText, dtyCol)
dtbOutput.Columns.Add(dclOutput)
Next intCol
For intRow As Integer = 0 To dgv.Rows.Count - 1
Dim drwNew As DataRow = dtbOutput.NewRow()
Dim dgvr As DataGridViewRow = dgv.Rows(intRow)
For intCol As Integer = 0 To dgv.Columns.Count - 1
drwNew.Item(intCol) = dgvr.Cells(intCol).Value
Next intCol
dtbOutput.Rows.Add(drwNew)
Next intRow
Return dtbOutput
End Function
用法:
Dim dtbNew As DataTable = Dgv2Dtb(dgvMyDataGridView)