VB问题,listview列表里有上万内容,怎样快速导出到Excel文件。(高分求救)
我用以下方法,发现速度很慢很慢。有没有快速的。帮帮我吧!OnErrorResumeNextDimexAsObjectDimexwbookAsObjectDimexshee...
我用以下方法,发现速度很慢很慢。有没有快速的。帮帮我吧!
On Error Resume Next
Dim ex As Object
Dim exwbook As Object
Dim exsheet As Object
Set ex = CreateObject("Excel.Application")
Set exwbook = Nothing
Set exsheet = Nothing
Set exwbook = ex.Workbooks().Add
Set exsheet = exwbook.Worksheets("sheet1")
Dim i As Integer
For i = 1 To Form1.ListView1.ListItems.Count
ex.Range("A" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(1)
ex.Range("B" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(2)
ex.Range("C" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(3)
ex.Range("D" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(4)
ex.Range("E" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(5)
Next i
exwbook.SaveAs "c:\1.xlsx" '保存输入到*.xlsx
ex.Quit '退出excel
MsgBox ("导出成功!") 展开
On Error Resume Next
Dim ex As Object
Dim exwbook As Object
Dim exsheet As Object
Set ex = CreateObject("Excel.Application")
Set exwbook = Nothing
Set exsheet = Nothing
Set exwbook = ex.Workbooks().Add
Set exsheet = exwbook.Worksheets("sheet1")
Dim i As Integer
For i = 1 To Form1.ListView1.ListItems.Count
ex.Range("A" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(1)
ex.Range("B" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(2)
ex.Range("C" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(3)
ex.Range("D" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(4)
ex.Range("E" & i ).Value = Form1.ListView1.ListItems.Item(i).SubItems(5)
Next i
exwbook.SaveAs "c:\1.xlsx" '保存输入到*.xlsx
ex.Quit '退出excel
MsgBox ("导出成功!") 展开
4个回答
展开全部
我想,listview显示的上万内容,应该是从数据库读取的吧。
如果是这样,你就应该直接从数据库导出到Excel文件,比起往每个CELL里写数据的方法提高许多倍!
下面给出利用ADODB控件操作数据库,并导出到Excel的例子:
Public Function ExporToExcel(strOpen As String)
'*********************************************************
'* 名称:ExporToExcel
'* 功能:导出数据到EXCEL
'* 用法:ExporToExcel(sql查询字符串)
'*********************************************************
Dim Rs_Data As New ADODB.Recordset
Dim Irowcount As Integer
Dim Icolcount As Integer
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlQuery As Excel.QueryTable
With Rs_Data
If .State = adStateOpen Then
.Close
End If
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Source = strOpen
.Open
End With
With Rs_Data
If .RecordCount < 1 Then
MsgBox ("没有记录!")
Exit Function
End If
'记录总数
Irowcount = .RecordCount
'字段总数
Icolcount = .Fields.Count
End With
Set xlApp = CreateObject("Excel.Application")
Set xlBook = Nothing
Set xlSheet = Nothing
Set xlBook = xlApp.Workbooks().Add
Set xlSheet = xlBook.Worksheets("sheet1")
xlApp.Visible = True
'添加查询语句,导入EXCEL数据
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
With xlQuery
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
End With
xlQuery.FieldNames = True '显示字段名
xlQuery.Refresh
With xlSheet
.Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
'设标题为黑体字
.Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
'标题字体加粗
.Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
'设表格边框样式
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.Application.Visible = True
Set xlApp = Nothing '"交还控制给Excel
Set xlBook = Nothing
Set xlSheet = Nothing
End Function
注:须在程序中引用'Microsoft Excel 9.0 Object Library'和ADO对象,机器必装Excel 2000
本程序在Windows 98/2000,VB 6 下运行通过。
如果是这样,你就应该直接从数据库导出到Excel文件,比起往每个CELL里写数据的方法提高许多倍!
下面给出利用ADODB控件操作数据库,并导出到Excel的例子:
Public Function ExporToExcel(strOpen As String)
'*********************************************************
'* 名称:ExporToExcel
'* 功能:导出数据到EXCEL
'* 用法:ExporToExcel(sql查询字符串)
'*********************************************************
Dim Rs_Data As New ADODB.Recordset
Dim Irowcount As Integer
Dim Icolcount As Integer
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim xlQuery As Excel.QueryTable
With Rs_Data
If .State = adStateOpen Then
.Close
End If
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Source = strOpen
.Open
End With
With Rs_Data
If .RecordCount < 1 Then
MsgBox ("没有记录!")
Exit Function
End If
'记录总数
Irowcount = .RecordCount
'字段总数
Icolcount = .Fields.Count
End With
Set xlApp = CreateObject("Excel.Application")
Set xlBook = Nothing
Set xlSheet = Nothing
Set xlBook = xlApp.Workbooks().Add
Set xlSheet = xlBook.Worksheets("sheet1")
xlApp.Visible = True
'添加查询语句,导入EXCEL数据
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Range("a1"))
With xlQuery
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
End With
xlQuery.FieldNames = True '显示字段名
xlQuery.Refresh
With xlSheet
.Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Name = "黑体"
'设标题为黑体字
.Range(.Cells(1, 1), .Cells(1, Icolcount)).Font.Bold = True
'标题字体加粗
.Range(.Cells(1, 1), .Cells(Irowcount + 1, Icolcount)).Borders.LineStyle = xlContinuous
'设表格边框样式
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.Application.Visible = True
Set xlApp = Nothing '"交还控制给Excel
Set xlBook = Nothing
Set xlSheet = Nothing
End Function
注:须在程序中引用'Microsoft Excel 9.0 Object Library'和ADO对象,机器必装Excel 2000
本程序在Windows 98/2000,VB 6 下运行通过。
展开全部
速度慢主要是由于excel数据量大造成的,不是vb程序的原因;
解决此问题有以下几种方法:
(1)输出为csv文件,再用excel打开,另存为xlsx;(速度最快)
(2)输出分为几个文件,每个记录控制在2000-3000个;
(3)输出为一个xlsx文件,分段为几张表,如果要合为一张表,可控制excel使用剪切、粘贴。
(剪切、粘贴的速度很快)
解决此问题有以下几种方法:
(1)输出为csv文件,再用excel打开,另存为xlsx;(速度最快)
(2)输出分为几个文件,每个记录控制在2000-3000个;
(3)输出为一个xlsx文件,分段为几张表,如果要合为一张表,可控制excel使用剪切、粘贴。
(剪切、粘贴的速度很快)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我几乎不用个控件,留个脚印,
我的解改思路是这样的
1.第一你显示LISTVIEW,一定有记录集或数组吧,这有这个输出
2.搞一很强的控件与LISTVIEW同时用(或不用LISTVIEW)
如F1BOOK,VSFLEX都支持几句话输出,速度超快.
我的解改思路是这样的
1.第一你显示LISTVIEW,一定有记录集或数组吧,这有这个输出
2.搞一很强的控件与LISTVIEW同时用(或不用LISTVIEW)
如F1BOOK,VSFLEX都支持几句话输出,速度超快.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
qq:532520209
加我,我给你代码。很简单。
加我,我给你代码。很简单。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询