Excel导出多次导出同一行

时间:2016-11-08 12:20:19

标签: excel vb.net datagridview iteration export-to-excel

我已经为我的vb.net应用程序编写了一个导出过程,该过程将DataGridView中显示的数据导出到Excel电子表格中。

但是,它不是复制DataGridView中的所有23行,而是复制相同的行,但复制23次。以下For Loop有什么问题,这意味着它只复制一条记录?

For i = 0 To dgvExport.RowCount - 1
 For j = 0 To dgvExport.ColumnCount - 1
  For k As Integer = 1 To dgvExport.Columns.Count
      xlWorksheet.Cells(1, k) = dgvExport.Columns(k - 1).HeaderText
      xlWorksheet.Cells(i + 2, j + 1) = dgvExport(j, 1).Value.ToString
  Next
 Next
Next

我需要复制字段名称,因此需要HeaderText行和k变量。

我的DGV片段,显示有不同的记录; enter image description here

结果导出;

enter image description here

修改

根据建议,我将代码更改为以下

 For k As Integer = 1 To dgvExport.Columns.Count
  xlWorksheet.Cells(1, k) = dgvExport.Columns(k - 1).HeaderText
 Next

 For i = 0 To dgvExport.RowCount - 1
  For j = 0 To dgvExport.ColumnCount - 1
   xlWorksheet.Cells(i + 3, j + 1) = dgvExport(j, i).Value.ToString
  Next
 Next

但现在出错了

  

对象引用未设置为对象的实例

xlWorksheet.Cells(i + 3, j + 1) = dgvExport(j, i).Value.ToString

1 个答案:

答案 0 :(得分:1)

重复行的原始问题来自:

For i = 0 To dgvExport.RowCount - 1
    For j = 0 To dgvExport.ColumnCount - 1
       For k As Integer = 1 To dgvExport.Columns.Count

细胞被重复过多次。使用一个循环导出HeaderText,然后导出另一个循环用于数据。

  

对象引用未设置为对象的实例

AKA NullReferenceException

如果DGV上的AllowUserToAddRows为真,则表示您循环了太多行。该行中的单元格为Nothing,因此您获得了NullReferenceException

 For i = 0 To dgvExport.RowCount - 1
     If dgvExport.Rows(i).IsNewRow Then Continue
     For j = 0 To dgvExport.ColumnCount - 1
         xlWorksheet.Cells(i + 3, j + 1) = dgvExport(j, i).Value.ToString
     Next
 Next

或者更改行循环:

' one less to account for the new user row
For i = 0 To dgvExport.RowCount - 2