2016-11-08 7 views
1

DataGridViewに表示されているデータをExcelスプレッドシートにエクスポートするvb.netアプリケーションのエクスポート手順を記述しました。Excelのエクスポート同じ行を複数回エクスポートする

しかし、DataGridViewの23行すべてをコピーするのではなく、同じものを23回コピーします。下記のFor Loopの何が間違っていますか?それは1つのレコードのみをコピーするということですか?

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

EDIT示唆したように、私は次のよう

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

ループは次のとおりです。 Column/For Each Column - 私は23の列があると推測しています。ヘッダテキストに対して1つのループを行い、データのメインの行/列ループを行います。 – Plutonix

答えて

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をエクスポートするために1つのループを使用し、データのために別のループを使用します。


オブジェクト参照オブジェクト

AKAとNullReferenceException

のインスタンスに設定されていないAllowUserToAddRowsはDGVにtrueの場合、それはあなたが1つのあまりにも多くの行をループしていることを意味します。あなたがNullReferenceExceptionを得るように、その行のセルは、Nothingです:

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

関連する問題