2017-07-27 25 views
1

私はデータグリッドビューを持っており、Excelにエクスポートしたい。 データグリッドビューの[表示]列のみをエクスポートします。'インデックスが範囲外でした。負でなく、コレクションのサイズより小さくなければならない

しかし、このエラーが発生しています。私はこのエラーを取得しておく

Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click 
    Dim ExcelApp As Excel.Application 
    Dim ExcelWorkBk As Excel.Workbook 
    Dim ExcelWorkSht As Excel.Worksheet 
    Dim i As Integer 
    Dim j As Integer 
    ExcelApp = New Excel.Application 
    ExcelWorkBk = ExcelApp.Workbooks.Add() 
    ExcelWorkSht = ExcelWorkBk.Sheets("Sheet1") 
    Dim columnsCount As Integer = DGVinfo3.Columns.Count 
     For i = 0 To DGVinfo3.RowCount - 1 
     If DGVinfo3.Columns(i).Visible = True Then 
      For j = 0 To DGVinfo3.ColumnCount - 1 
       For k As Integer = 0 To DGVinfo3.Columns.Count + 1 
        If DGVinfo3.Columns(k).Visible = True Then 
         ExcelWorkSht.Cells(1, k) = DGVinfo3.Columns(k - 1).HeaderText 
         ExcelWorkSht.Cells(1, k).Font.Bold = True 
         ExcelWorkSht.Cells(1, k).interior.color = RGB(192, 203, 219) 
         ExcelWorkSht.Cells(i + 1, j + 1) = DGVinfo3(j, i).Value 
        End If 
       Next 
      Next 
     End If 
    Next 
End Sub 

:私はエラーを取得する場所

System. Argument Out Of Range Exception: 'Index was out of range. Must be non-negative and less than the size of the collection.'

ここでは、次のとおりです。

ExcelWorkSht.Cells(1, k) = DGVinfo3.Columns(k - 1).HeaderText 
+2

'kの整数= 0 + 1 'DGVinfo3.Columns.Countしますあなたは '+ 1'の代わりに' -1'を持っていたのですか? – litelite

+0

@liteeliteまだ同じ問題がエラー – Jj84

+0

DGVinfo3.Columns.Count + 1を与えて、その後(i + 1、j + 1)。あなたは何を達成しようとしていますか?また、kが0のときの(k-1) – n8wrl

答えて

0

だけループ行とそのループ内の各列。非表示の列がExcelにエクスポートされませんので、また、それは別の変数にExcelの列を追跡するために、おそらく最善です:

Dim xlColumn As Integer 

    For i = 0 To DGVinfo3.RowCount - 1 
     xlColumn = 0 
     For j = 0 To DGVinfo3.ColumnCount - 1 
       If DGVinfo3.Columns(j).Visible = True Then 
        xlColumn += 1 
        If i = 0 Then 
         'You only need to set the column headers for the first row 
         ExcelWorkSht.Cells(1, xlColumn) = DGVinfo3.Columns(j).HeaderText 
         ExcelWorkSht.Cells(1, xlColumn).Font.Bold = True 
         ExcelWorkSht.Cells(1, xlColumn).interior.color = RGB(192, 203, 219) 
        End If 
        'i + 2 because the header is row 1 
        ExcelWorkSht.Cells(i + 2, xlColumn) = DGVinfo3(i, j).Value 
       End If 
     Next 
    Next 
関連する問題

 関連する問題