Excel导出多次输出相同的行

问题描述:

我为我的vb.net应用程序编写了一个导出过程,该过程将DataGridView中显示的数据导出到Excel电子表格中。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

'对于k'环路出口标题不应该是其他两个环路出口细胞内,和'dgvExport(j,1)'应该改为'dgvExport(j,i)'。 – BrakNicku

+0

@BrakNicku,当分离循环并将1更改为i时,它会在'dgvExport(j,i)'上说“对象引用未设置为对象的实例” – David

+0

您的循环为:对于每行/每个列/对于每列 - 我猜测有23列。为标题文本执行一个循环,然后执行数据的主行/列循环 – Plutonix

重复行的原始问题是从这个:

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

如果AllowUserToAddRows是在DGV属实,这意味着你是一个循环的行太多的实例。该行中的细胞是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 
+0

排序它,谢谢! – David