• 全部
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
  • 问答

提问,关于DataGrid数据导出的问题?请教各位大侠了?

snowjin78 2005-11-18 04:43:18
问题描述如下:
在查询窗体(win1)上,选择查询条件,执行查询操作但是查询结果却在另外一个窗体上(win2)的DataGrid上显示,现在要把在Win2上的数据导入到Excel中去,我搞不定的是如何把已经在Datagrid中显示的数据读到一个Table中去。
其中把查询结果在win2上显示的代码如下:
'//激活查询结果显示窗体
Dim frmobj1 As New frmQueryResult
frmobj1.Show()

Dim ds As New DataSet
ds.Clear()
ds = CommandRecord(sqlstr)
If Not ds Is Nothing Then
frmobj1.DataGrid1.DataSource = ds.Tables(0).DefaultView
End If
那么,现在win2上有一个Button1按钮,点下它时,数据导入到Excel文件中去,我现在就是想把win2上的DataGrid控件的数据(查询所得)读入到一个 DataTable中去,呵呵,很罗嗦,感谢各位了。
...全文
159 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hamadou 2005-11-19
[转自李洪根的文章]
Private Function CreaTable() As DataTable
Dim dt As New DataTable()
dt.Columns.Add("列1", GetType(String))
dt.Columns.Add("列2", GetType(Integer))
dt.Columns.Add("列3", GetType(String))
dt.Columns.Add("列4", GetType(String))
Dim row, row1 As DataRow
row = dt.NewRow()
row!列1 = "行1"
row!列2 = 1
row!列3 = "d"
row!列4 = "a"
dt.Rows.Add(row)
row1 = dt.NewRow()
row1!列1 = "行2"
row1!列2 = 12
row1!列3 = "b"
row1!列4 = "c"
dt.Rows.Add(row1)
Return dt
End Function
2.将表中的内容导出到Excel
Dim xlApp As New Excel.Application()
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Dim rowIndex, colIndex As Integer
rowIndex = 1
colIndex = 0

xlBook = xlApp.Workbooks().Add
xlSheet = xlBook.Worksheets("sheet1")

Dim Table As New DataTable()
Table = CreaTable()

'将所得到的表的列名,赋值给单元格
Dim Col As DataColumn
Dim Row As DataRow
For Each Col In Table.Columns
colIndex = colIndex + 1
xlApp.Cells(1, colIndex) = Col.ColumnName
Next

'得到的表所有行,赋值给单元格
For Each Row In Table.Rows
rowIndex = rowIndex + 1
colIndex = 0
For Each Col In Table.Columns
colIndex = colIndex + 1
xlApp.Cells(rowIndex, colIndex) = Row(Col.ColumnName)
Next
Next

With xlSheet
.Range(.Cells(1, 1), .Cells(1, colIndex)).Font.Name = "黑体"
'设标题为黑体字
.Range(.Cells(1, 1), .Cells(1, colIndex)).Font.Bold = True
'标题字体加粗
.Range(.Cells(1, 1), .Cells(rowIndex, colIndex)).Borders.LineStyle = 1
'设表格边框样式
End With

With xlSheet.PageSetup
.LeftHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10公司名称:" ' & Gsmc
.CenterHeader = "&""楷体_GB2312,常规""公司人员情况表&""宋体,常规""" & Chr(10) & "&""楷体_GB2312,常规""&10日 期:"
.RightHeader = "" & Chr(10) & "&""楷体_GB2312,常规""&10单位:"
.LeftFooter = "&""楷体_GB2312,常规""&10制表人:"
.CenterFooter = "&""楷体_GB2312,常规""&10制表日期:"
.RightFooter = "&""楷体_GB2312,常规""&10第&P页 共&N页"
End With

xlApp.Visible = True
回复
snowjin78 2005-11-19
To: qqchenjacky()
您说的好像不对,我现在就是想得到结果显示窗体上DataGrid的数据,也就是你的代码里,ds如何得到,而
Dim frmobj1 As New frmQueryResult
Dim ds As New DataSet
ds.Clear()
ds = CommandRecord(sqlstr)
If Not ds Is Nothing Then
frmobj1.DataGrid1.DataSource = ds.Tables(0).DefaultView
End If

frmobj1.Show()

这段代码是在另外一个查询窗体上写的?

谁能告诉我啊?
回复
qqchenjacky 2005-11-19
Dim frmobj1 As New frmQueryResult


Dim ds As New DataSet
ds.Clear()
ds = CommandRecord(sqlstr)
If Not ds Is Nothing Then
frmobj1.DataGrid1.DataSource = ds.Tables(0).DefaultView
End If

frmobj1.Show()


导出到excel :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ExportToExcel()
End Sub

修改以下:
Public Sub ExportToExcel()

Try
Dim datav As New DataView
datav = ds.Tables(0).DefaultView
Dim i, j As Integer
Dim rows As Integer = datav.Table.Rows.Count
Dim cols As Integer = datav.Table.Columns.Count
Dim DataArray(rows - 1, cols - 1) As String
Dim myExcel As New Excel.Application
For i = 0 To rows - 1
For j = 0 To cols - 1
If datav.Table.Rows(i).Item(j) Is System.DBNull.Value Then
Else
DataArray(i, j) = datav.Table.Rows(i).Item(j)
End If
Next
Next
myExcel.Application.Workbooks.Add(True)
myExcel.Visible = True
For j = 0 To cols - 1
myExcel.Cells(1, j + 1) = datav.Table.Columns(j).ColumnName
Next
myExcel.Range("A2").Resize(rows, cols).Value = DataArray
Catch exp As Exception
MessageBox.Show("数据导出失败!请查看是否已经安装了Excel", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)

End Try

End Sub


回复
snowjin78 2005-11-19
To: kjq_vb(跟着MS走)
你能不能说的具体一点,是不是要什么声明才能够使用这个函数啊?
我如果这样声明的话好像不对?
Dim da As DataTable
da = CType(Me.DataGrid1.DataSource, DataTable)

未处理的“System.InvalidCastException”类型的异常出现在 111.exe 中。

其他信息: 指定的转换无效。
回复
kjq_vb 2005-11-18
ctype(frmobj1.DataGrid1.DataSource,datatable)
回复
yrh2008sql 2005-11-18
你的ds = CommandRecord(sqlstr)是查询后的把?如果是的话,就用它就可以到入到excel里了。ds.table(0)应该是你要的Datatable。
回复
相关推荐
发帖
VB
创建于2007-09-28

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
帖子事件
创建了帖子
2005-11-18 04:43
社区公告
暂无公告