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
变量。
由此产生的导出;
编辑
至于建议,我改变了我的代码以下
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
答
重复行的原始问题是从这个:
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
'对于k'环路出口标题不应该是其他两个环路出口细胞内,和'dgvExport(j,1)'应该改为'dgvExport(j,i)'。 – BrakNicku
@BrakNicku,当分离循环并将1更改为i时,它会在'dgvExport(j,i)'上说“对象引用未设置为对象的实例” – David
您的循环为:对于每行/每个列/对于每列 - 我猜测有23列。为标题文本执行一个循环,然后执行数据的主行/列循环 – Plutonix