2017-11-25 6 views
0

タイトルはそれをすべて言っています。マイクロソフトのコードも入手しました。ヘッダーと最後の行の後の最初の行をスキップしますが、正常にエクスポートされてExcelに転送されます。Visual Studio 2015のdatagridviewは2行スキップするようです。コードの何が間違っていますか?

Dim excel As Microsoft.Office.Interop.Excel._Application = New Microsoft.Office.Interop.Excel.Application() 
     Dim workbook As Microsoft.Office.Interop.Excel._Workbook = excel.Workbooks.Add(Type.Missing) 
     Dim worksheet As Microsoft.Office.Interop.Excel._Worksheet = Nothing 

     Try 

      worksheet = workbook.ActiveSheet 

      worksheet.Name = "ExportedFromDatGrid" 

      Dim cellRowIndex As Integer = 1 
      Dim cellColumnIndex As Integer = 1 

      'Loop through each row and read value from each column. 
      For i As Integer = 0 To DataGridView1.Rows.Count - 2 
       For j As Integer = 0 To DataGridView1.Columns.Count - 1 
        ' Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check. 
        If cellRowIndex = 1 Then 
         worksheet.Cells(cellRowIndex, cellColumnIndex) = DataGridView1.Columns(j).HeaderText 
        Else 
         worksheet.Cells(cellRowIndex, cellColumnIndex) = DataGridView1.Rows(i).Cells(j).Value.ToString() 
        End If 
        cellColumnIndex += 1 
       Next 
       cellColumnIndex = 1 
       cellRowIndex += 1 
      Next 

      'Getting the location and file name of the excel to save from user. 
      Dim saveDialog As New SaveFileDialog() 
      saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*" 
      saveDialog.FilterIndex = 2 

      If saveDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 
       workbook.SaveAs(saveDialog.FileName) 
       MessageBox.Show("Export Successful") 
      End If 
     Catch ex As System.Exception 
      MessageBox.Show(ex.Message) 
     Finally 
      excel.Quit() 
      workbook = Nothing 
      excel = Nothing 
     End Try 

ありがとうございます!非常に感謝しています。私は何も言うことはありません。私の質問スタックを投稿させてください。

+0

あなたがコードをブレークポイントやステップを設定しましたか?そうでない場合は、そうする必要があります。そうすることで、コード内のどの部分があなたの期待と一致しないのかを知ることができます。あなたがしなければ、それは最初にあなたの期待が間違っていることを意味します。 – jmcilhinney

+0

は、cellrowindex = 1の値をとっているので、ヘッダーを書き出し、cellrowindex = 2にします.2行目から開始し、1行目をスキップします。最後の行ではスキップします。私はdgv.rows.count -2をdgv.rows.count -1に変更しました。 – Vainicz

答えて

0

あなたのループは、(あなたのコメントに書いた)その問題を担当しています。
なぜそれをもっと読みやすく、不潔なものにしないのですか?ここ

は私の提案です:

Dim excel As Microsoft.Office.Interop.Excel._Application = New Microsoft.Office.Interop.Excel.Application() 
Dim workbook As Microsoft.Office.Interop.Excel._Workbook = excel.Workbooks.Add(Type.Missing) 
Dim worksheet As Microsoft.Office.Interop.Excel._Worksheet = Nothing 

Try 

    worksheet = workbook.ActiveSheet 

    worksheet.Name = "ExportedFromDatGrid" 


    For cellColumnIndex = 0 To dgv.Columns.Count - 1 
     worksheet.Cells(1, cellColumnIndex + 1) = dgv.Columns(cellColumnIndex).HeaderText 
     For cellRowIndex = 0 To dgv.RowCount - 1 
      worksheet.Cells(cellRowIndex + 2, cellColumnIndex + 1) = dgv.Rows(cellRowIndex).Cells(cellColumnIndex).Value 
     Next 
    Next 


    worksheet.Rows("1:10000").RowHeight = 25 
    'Getting the location and file name of the excel to save from user. 
    Dim saveDialog As New SaveFileDialog() 
    saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*" 
    saveDialog.FilterIndex = 2 

    If saveDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 
     workbook.SaveAs(saveDialog.FileName) 
     MessageBox.Show("Export Successful") 
    End If 
Catch ex As System.Exception 
    MessageBox.Show(ex.Message) 
Finally 
    excel.Quit() 
    workbook = Nothing 
    excel = Nothing 
End Try 
関連する問題