Vb.net 使用VB编写Excel(多行)
我的代码通过SQL中的查询成功创建了Excel文件,尽管创建该文件需要花费太多的时间。如何最大限度地减少创建时间?Vb.net 使用VB编写Excel(多行),vb.net,excel,vba,Vb.net,Excel,Vba,我的代码通过SQL中的查询成功创建了Excel文件,尽管创建该文件需要花费太多的时间。如何最大限度地减少创建时间? 代码如下: rsAnaforaPr.DoQuery("SELECT * FROM [dbo].[zam_excel]") rsAnaforaPr.MoveFirst() hj = False rowCount = 1 While rsAnaforaPr.EoF = False shell1 = rsAnaforaPr.Fields.Item("Va
代码如下:
rsAnaforaPr.DoQuery("SELECT * FROM [dbo].[zam_excel]")
rsAnaforaPr.MoveFirst()
hj = False
rowCount = 1
While rsAnaforaPr.EoF = False
shell1 = rsAnaforaPr.Fields.Item("Value1").Value
If hj = False Then
oExcel = CreateObject("Excel.Application")
oExcel.DisplayAlerts = False
oBook = oExcel.Workbooks.Add
hj = True
oBook.SaveAs("C:\Desktop\New folder\excel.xlsx")
oBook.Close(True)
oExcel.Quit()
oExcel = CreateObject("Excel.Application")
oExcel.DisplayAlerts = False
oBook = oExcel.Workbooks.Open("C:\Desktop\New folder\excel.xlsx")
oSheet = oBook.Worksheets("Sheet1")
oSheet.Range("A" & rowCount).Value = "Value1"
rowCount = rowCount + 1
oSheet.Range("A" & rowCount).NumberFormat = "@"
oSheet.Range("A" & rowCount).Value = shell1
Else
oSheet.Range("A" & rowCount).NumberFormat = "@"
oSheet.Range("A" & rowCount).Value = shell1
End If
rowCount = rowCount + 1
rsAnaforaPr.MoveNext()
End While
oBook.Close(True)
oExcel.Quit()
在开头写下以下内容:
Application.screenUpdate=False
然后在代码结束时编写:
Application.ScreenUpdate=True
速度提升将显而易见。
阅读更多关于
屏幕更新属性的信息-我使用与下面类似的代码。
但是,说到这里,我刚刚注意到了您的VB.NET
标记。。。出于某种原因,将其作为访问权限阅读。
我想这对那个没用?有人告诉我&我会删除答案
Sub Test()
Dim oXL As Object
Dim oWrkBk As Object
Dim DB As DAO.Database
Dim qdf As DAO.QueryDef
Dim prm As DAO.Parameter
Dim rst As DAO.Recordset
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'Defer error trapping in case Excel is not running. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''
On Error Resume Next
Set oXL = GetObject(, "Excel.Application")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'If an error occurs then create an instance of Excel. '
'Reinstate error handling. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Err.Number <> 0 Then
On Error GoTo -1
On Error GoTo ERR_HANDLE
Set oXL = CreateObject("Excel.Application")
End If
Set oWrkBk = oXL.workbooks.Add
oXL.Visible = True
Set DB = CurrentDb
Set qdf = DB.CreateQueryDef("", "SELECT * FROM [dbo].[zam_excel]")
For Each prm In qdf.Parameters
prm.Value = Eval(prm.Name)
Next prm
Set rst = qdf.OpenRecordset
If Not (rst.BOF And rst.EOF) Then
oWrkBk.worksheets(1).range("A1").CopyFromRecordSet rst
End If
EXIT_PROC:
On Error GoTo 0
Exit Sub
ERR_HANDLE:
Select Case Err.Number
Case Else
MsgBox Err.Description & "( " & Err.Number & ")", vbOKOnly
Resume EXIT_PROC
End Select
End Sub
子测试()
作为对象的Dim-oXL
作为对象的Dim oWrkBk
Dim数据库作为DAO.Database
将qdf设置为DAO.QueryDef
作为DAO.Parameter的Dim prm
将rst设置为DAO.Recordset
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果Excel未运行,则延迟错误捕获。'
'''''''''''''''''''''''''''''''''''''''''''''''''''''
出错时继续下一步
Set oXL=GetObject(,“Excel.Application”)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果发生错误,则创建Excel实例。'
“恢复错误处理。”
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
如果错误号为0,则
关于错误GoTo-1
On Error GoTo ERR_句柄
Set oXL=CreateObject(“Excel.Application”)
如果结束
设置oWrkBk=oXL.workbooks.Add
oXL.Visible=True
Set DB=CurrentDb
设置qdf=DB.CreateQueryDef(“,”从[dbo].[zam_excel]]中选择*)
对于qdf.参数中的每个prm
prm.Value=Eval(prm.Name)
下一个prm
Set rst=qdf.OpenRecordset
如果不是(rst.BOF和rst.EOF),则
oWrkBk.工作表(1).范围(“A1”).复制自记录集rst
如果结束
退出程序:
错误转到0
出口接头
错误句柄:
选择案例错误编号
其他情况
MsgBox错误说明(“&Err.Number&”),vbOKOnly
恢复退出程序
结束选择
端接头
如果在while循环中构建一个2D数组,并将数组写入电子表格,则填充速度会更快。只需将数组写入所需数据的左上角单元格,它将一次写入所有内容,而不是逐个单元格首先在循环中读取记录集中的所有内容。记录数组中的元素。然后将其全部写入Excel中的单个区域。这个问题更适合IMO。请记住,您可以使用GetRows
方法(DAO
和ADO
libs都支持)获取整个记录集的数组,然后用该数组填充一个单元格区域,即代表左上角。您好,Vityta,写这篇文章时,我收到了错误对象变量或未设置块变量