我已经为我的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
变量。
结果导出;
修改
根据建议,我将代码更改为以下
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
答案 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