2

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

我已经能够拼凑将我的 Datgrid 导出到 Excel 文件的代码并且工作正常,除了我只得到数据网格的第一行。由于数据网格可能包含一条或数百条记录,因此我需要将所有行导出到 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)

再次感谢您帮助我学习

4

1 回答 1

0

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

dg7.RowCount - 2

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

是新行

所以(虽然我最近没有在 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 对象调用,我无法给出合理的评论,因为我没有过多地使用该对象。
让我知道这是否有用和/或正确。

于 2012-10-28T21:27:25.940 回答