Excel导出多次导出相同的行
我为我的vb.net应用程序编写了一个导出过程,该过程将DataGridView
显示的数据导出到Excel电子表格中。
但是,而不是复制DataGridView
中的所有23行,它复制相同的,但23次。 下面的For Loop
有什么问题,这意味着它只复制一个logging?
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
variables。
我的DGV的片段,显示有不同的logging;
由此产生的出口;
编辑
正如所build议的,我改变了我的代码如下
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
如果DGU上的AllowUserToAddRows
为true,则表示循环了太多的行。 该行中的单元格是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