VB 2010:将datagrid导出到Excel只检索一行

时间:2012-10-20 14:12:58

标签: vb.net

我只想先提一下,我非常感谢所有给予他们知识帮助他人学习的人...

我已经能够将我的Datgrid导出到Excel文件的代码拼凑起来并且工作正常,除了我只获取datagrid的第一行。由于datagrid可以包含一个或几百个记录,我需要将所有行导出到Excel。

这是我能够放在一起的(再次,它工作正常,文件与列标题一起保存,但只从我的数据网格写入第一行数据):

'Export to Excel
    Dim ExApp1 As Excel.Application
    Dim ExWkbk1 As Excel.Workbook
    Dim ExWksht1 As Excel.Worksheet
    Dim MisValue As Object = System.Reflection.Missing.Value
    Dim i As Integer
    Dim j As Integer

    ExApp1 = New Excel.Application
    ExWkbk1 = ExApp1.Workbooks.Add(MisValue)
    ExWksht1 = ExWkbk1.Sheets("sheet1")



    For i = 0 To dg7.RowCount - 2
        For j = 0 To dg7.ColumnCount - 1
            ExWksht1.Cells(i + 2, j + 1) = dg7(j, i).Value.ToString()
            For k As Integer = 1 To dg7.Columns.Count
                ExWksht1.Cells(1, k) = dg7.Columns(k - 1).HeaderText
                ExWksht1.Cells(i + 2, j + 1) = dg7(j, i).Value.ToString()
            Next
        Next
    Next

    ExWksht1.SaveAs("C:\MyExcel.xlsx")
    ExWkbk1.Close()
    ExApp1.Quit()

    releaseObject(ExApp1)
    releaseObject(ExWkbk1)
    releaseObject(ExWksht1)

再次提前帮助我学习了许多事情

1 个答案:

答案 0 :(得分:0)

首先,在我看来,这是一个DataGridView而不是DataGrid,因为据我所知DataGrid在WinForms或Web.UI中没有“RowCount”或“ColumnCount”属性(我可能是错的)。
如果是这样的话有特定原因

  

dg7.RowCount - 2

如果您尝试从中获取数据的对象确实是DataGridView,那么我认为此任务是省略新的(空)行。如果我是正确的,你试图以这种方式从DataGridView导出数据,那么DataGridViewRow有一个属性可用于此目的:

  

IsNewRow

所以(虽然我最近没有在VB.NET中使用Excel)你的周期可能是:

For i = 0 To dg7.ColumnCount - 1
    ExWksht1Cells(1 , i + 1) = dg7.Columns[i].HeaderText
Next

For i = 0 To dg7.RowCount - 1
    If Not dg7.Rows(i).IsNewRow Then
        For j = 0 To dg7.ColumnCount - 1
            ExWksht1.Cells(i+ 2, j + 1) = dg7(i, j).Value.ToString()
        Next
    End If
Next

就excel对象调用而言,我无法给出合理的评论,因为我没有太多地使用该对象。
请告诉我这是否有用和/或正确。