如何将DataGridView中的数据导入EPPlus ExcelWorksheet

时间:2016-06-20 13:50:06

标签: vb.net datagridview epplus

我已尝试过抛出强制转换异常的代码:

Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets.Add(pageTitle)
Dim dataTable As DataTable
dataTable = dataGridView.DataSource ' cast exception

例外:

  

System.InvalidCastException:无法转换类型的对象   ' System.Windows.Forms.BindingSource'输入   ' Microsoft.Office.Interop.Excel.DataTable'

我需要DataTable来设置工作表:

worksheet.Cells("A1").LoadFromDataTable(dataTable, True)

1 个答案:

答案 0 :(得分:1)

如果您无法直接将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)