网页功能: 加入收藏 设为首页 网站搜索  
把DataGrid的数据快速写入EXCEL
发表日期:2003-06-23作者:杜运庆[] 出处:  

第一VB论坛上(http://www.vbgood.com)的朋友经常提出“怎样把DataGrid的数据快速写入EXCEL”这个问题,也看了很多用VB控制EXCEL报表的文章和实例,总的感觉是用EXCEL对象一个格子一个格子的写,速度太慢。看过一些国内外的大型软件,注意到他们对数据的报表处理也是写到EXCEL里面,显然,EXCEL对数据报表的处理确实强大和流行,既然如此,就按照鲁迅先生的主张:“拿来!”。

要解决的第一个问题是速度。很多朋友在使用EXCEL对象的时候只注意到它是个可以控制的对象,而忽略了EXCEL也可以作为一个数据库使用,它的名字就是数据库的名字,工作表就是一张数据库中的表,这样话,库之间数据的迁移使用SQL语句要快多了。

第二个问题是DataGrid作为显示数据的网格控件,任何时候不能当作数据库使用。因此在要把它的数据输出的时候可以考虑找它显示的数据源,把它的查询条件与输出的查询条件相一致就完全可以实现我们的目的。

本事例演示了不同的数据源写入EXCEL,在VB6+WIN98下面调试通过。要使用它必须做到以下3点:

1. 在当前目录里面有一个ACCESS数据库,里面有"毕业学生","在校学生"和"退学学生"三张表,每张表里面有"班级","姓名","性别","家庭住址"和"工作单位"等字段,以及一些数据。

2. 要从"工程"→"引用"里面引用Microsoft Active Data Objects 2.1 Library和Microsoft DAO 3.6 Object Library两个对象库。

3. EXCEL的安装路径是默认安装路径。

在窗体上面放置一个DataGrid和三个CommandButton,把下列代码复制到里面,并按F5运行,就可以实现我们的目的。

代码如下:

'声明API函数

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'定义变量

Dim Cnn1 As New ADODB.Connection

Dim rst1 As New ADODB.Recordset

Dim StrSQL As String

Dim TabName As String

Dim Selection As String

Private Sub Command1_Click()

'设置第一个数据源的查询条件

TabName = "毕业学生"

Selection = "班级,姓名,工作单位"

'获取数据

ReqData

End Sub

Private Sub Command2_Click()

'设置第二个数据源的查询条件

TabName = "在校学生"

Selection = "*"

'获取数据

ReqData

End Sub

Private Sub Command3_Click()

'设置第三个数据源的查询条件

TabName = "退学学生"

Selection = "班级,姓名,性别"

'获取数据

ReqData

End Sub

Private Sub Command4_Click()

'如果EXCEL文件已经打开,需要先关闭它.

Dim lpClassName As String

Dim lpCaption As String

Dim Handle As Long

lpClassName = "XLMAIN"

lpCaption = "Microsoft Excel - MyExcel.xls"

Handle = FindWindow(lpClassName$, lpCaption$)

If Handle <> 0 Then

MsgBox "请先关闭EXCEL文件!", vbOKOnly + vbInformation, "不能对已经打开的文件进行写操作!"

Exit Sub

End If

'检查EXCEL文件是否存在,如果存在则删除

If Dir(App.Path & "\MyExcel.xls") <> "" Then Kill App.Path & "\MyExcel.xls"

'进行数据转换

Dim dbs As Database

'打开数据库

Set dbs = OpenDatabase(App.Path & "\db1.mdb")

'把数据导入EXCEL

dbs.Execute "SELECT " & Selection & " INTO [Excel 8.0;DATABASE=" & App.Path & "\MyExcel.xls].[WorkSheet1] FROM " & TabName

'关闭数据库对象

dbs.Close

'释放数据库对象

Set dbs = Nothing

'调用EXCEL打开产生的EXCEL表格

Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & App.Path & "\MyExcel.xls", vbMaximizedFocus

End Sub

Private Sub ReqData()

'设置查询语句

StrSQL = "SELECT " & Selection & " FROM " & TabName

'如果数据库已打开的则先关闭,防止出错

If Cnn1.ConnectionString <> "" Then Cnn1.Close

'打开数据库

Cnn1.Open "Provider=Microsoft.Jet.OLEDB.3.51; Data Source=" & App.Path & "\db1.mdb;"

'设置记录集的打开方式和锁的机制等

With rst1

  .CursorType = adOpenKeyset

  .LockType = adLockOptimistic

  .Open StrSQL, Cnn1, , , adCmdText

End With

'为DataGrid1设置数据源

Set DataGrid1.DataSource = rst1

DataGrid1.Refresh

'为DataGrid1设置标题,并显示记录数

DataGrid1.Caption = "表[" & TabName & "]共" & rst1.RecordCount & "条记录"

End Sub

Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)

'为DataGrid1设置标题,并显示记录数,用此事件是防止操作员删除记录后记录数发生变化

DataGrid1.Caption = "表[" & TabName & "]共" & rst1.RecordCount & "条记录"

End Sub

本事例只是演示了ACCESS数据库和DataGrid以及简单的查询,对于其他类型的数据库和网格控件以及复杂的查询都可以参照本例进行修改使用,希望对大家的编程有所启发。

以上示例代码如需要,可写信duyunqing@163.net索取。

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 把DataGrid的数据快速写入EXCEL
本类热点文章
  在VB应用程序中调用Excel2000
  在VB中使用水晶报表的一种简易编程方法
  BOM表查询的VB实现方法
  如何將Excel的文件导入Access文件
  把DataGrid的数据快速写入EXCEL
  把DataGrid的数据快速写入EXCEL
  Visual Basic 导出到 Excel 提速之法
  Visual Basic 导出到 Excel 提速之法
  DataGrid 控件的使用
  VB中DataCombo和DataList 控件的使用
  ADO三大对象的属性、方法、事件及常数
  VB中MSHFlexGrid控件的应用
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2019 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00357