我只想先提一下,我非常感谢所有给予他们知识帮助他人学习的人...
我已经能够将我的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)
再次提前帮助我学习了许多事情
答案 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对象调用而言,我无法给出合理的评论,因为我没有太多地使用该对象。
请告诉我这是否有用和/或正确。