请问一下关于VB导出到excel的有关问题
请教一下关于VB导出到excel的问题
我现在做的程序是这样的:
通过SQL语句查询得到的结果放在表格控件mshflexgrid中,点击导出的时候把表格中显示的所有内容导出到excel
但是之前代码的效果是往excel表格中一格一格的添加内容 这样在数据比较多的时候就会很慢
有没有什么办法类似于整表复制的可以一下子就把全部数据填入excel中呢
------解决方案--------------------
可以把 Excel 当作 Jet Engine 的外部数据库,用 SQL 语句从 Access 或 SQL 数据库直接导入记录集。
------解决方案--------------------
针对你这种情况,比较快的是将Recordset 直接导出为Excel,实际是CopyFromRecordset这个方法的应用
我现在做的程序是这样的:
通过SQL语句查询得到的结果放在表格控件mshflexgrid中,点击导出的时候把表格中显示的所有内容导出到excel
但是之前代码的效果是往excel表格中一格一格的添加内容 这样在数据比较多的时候就会很慢
有没有什么办法类似于整表复制的可以一下子就把全部数据填入excel中呢
- VB code
Private Sub cmdexcel_Click() Dim save As String Dim xlsRowCount As Integer, xlsColCount As Integer '生成的表格的行数和列数 Dim xlsApp As excel.Application Dim xlsBook As excel.Workbook Dim xlsSheet As excel.Worksheet Dim i, j As Long On Error GoTo errexcel Set xlsApp = CreateObject("Excel.Application") Set xlsBook = xlsApp.Workbooks.Add Set xlsSheet = xlsBook.Worksheets(1) 'On Error Resume Next Err.Number = 0 xlsRowCount = rlist.Rows xlsColCount = rlist.Cols codsave.CancelError = True codsave.InitDir = App.Path codsave.Filter = "Excel 97-03(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx" codsave.ShowSave Me.MousePointer = vbHourglass With xlsSheet '设置电子表格各列的宽度 .Columns(1).ColumnWidth = 16 '每一个汉字大概占2的宽度(在默认的12号字的情况下) .Columns(2).ColumnWidth = 20 .Columns(3).ColumnWidth = 30 .Columns(4).ColumnWidth = 30 .Columns(5).ColumnWidth = 30 '设置电子表格各行的高度 For i = 1 To xlsRowCount .Rows(i).RowHeight = 18 Next '把rlist的内容写入到电子表格中 .Cells(1, 1).Value = "号 码" .Cells(1, 2).Value = "姓 名" .Cells(1, 3).Value = "单 位" .Cells(1, 4).Value = "住 址" .Cells(1, 5).Value = "备 注" For i = 0 To xlsRowCount - 1 For j = 0 To 4 .Cells(i + 2, j + 1).Value = "'" & rlist.TextMatrix(i, j + 1) '第二行 Next Next End With xlsApp.Visible = False '是否显示电子表格 Me.MousePointer = vbDefault 'xlsBook.SaveAs App.Path & "\Test.xlsx" '存到根目录文件名test.xlsx save = codsave.FileName xlsBook.SaveAs save MsgBox "导出成功", vbInformation xlsBook.Close savechanges:=False xlsApp.Quit Set xlsSheet = Nothing Set xlsBook = Nothing Set xlsApp = Nothing '交还控制给Excel Exit Sub errexcel: Me.MousePointer = vbDefault xlsApp.Quit Set xlsSheet = Nothing Set xlsBook = Nothing Set xlsApp = Nothing '交还控制给Excel Exit Sub End Sub
------解决方案--------------------
可以把 Excel 当作 Jet Engine 的外部数据库,用 SQL 语句从 Access 或 SQL 数据库直接导入记录集。
------解决方案--------------------
针对你这种情况,比较快的是将Recordset 直接导出为Excel,实际是CopyFromRecordset这个方法的应用
- VB code
Dim Myexcel As New Excel.Application Dim Mybook As New Excel.Workbook Dim Mysheet As New Excel.Worksheet dim i as long Set Mybook = Myexcel.Workbooks.Add '添加一个新的BOOK Set Mysheet = Mybook.Worksheets.Add '添加一个新的SHEET Myexcel.Visible = True Rs.Open SQL, Cn With Mysheet .Range("A2").CopyFromRecordset Rs '这里就是具体的应用 .PageSetup.PrintGridlines = True .PrintPreview End With Rs.close Set Rs = Nothing
------解决方案--------------------