以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 导出excel模板的报表速度过慢 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130699) |
|
-- 作者:lur320 -- 发布时间:2019/1/29 14:16:00 -- 导出excel模板的报表速度过慢 导出excel模板的速度过慢。 测试过赋值各个var的变量速度很快,就是到下面这段代码前都很快。慢在启动excel很慢。 请问如何优化下面这段代码。或者在打开窗体的时候,事前在后台启动好模板而不是在最后 Book.Build()? Dim Book As New XLS.Book(ProjectPath & "。。。。。.xlsx") Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表 With Sheet.PrintSetting .PaperKind = 9 \'设为A4纸 .LandScape = True \'横向打印 .MarginTop=12 .MarginBottom=16 .AutoScale = True \'自动缩放 .FitPagesAcross = 1 \'垂直方向缩为1页 .FitPagesDown=1 End With Book.Build() \'生成细节区 Book.SaveToPDF(fls) \'保存为PDF文件 |
|
-- 作者:有点甜 -- 发布时间:2019/1/29 14:45:00 -- 1、是build慢,还是savetopdf慢?
2、是不是你excel报表要生成的数据过多?
3、做个例子发上来测试。 |
|
-- 作者:lur320 -- 发布时间:2019/1/29 15:22:00 --
|
|
-- 作者:有点甜 -- 发布时间:2019/1/29 15:37:00 -- 以下是引用lur320在2019/1/29 15:22:00的发言:
那就是你build的数据过多的原因。做个例子测试。看是否有优化空间。 |
|
-- 作者:lur320 -- 发布时间:2019/1/30 13:22:00 -- 也还不算多,大约使用了25个var的变量,每个var都来自于数据库的25个行。这些行都有一个索引编号。 例如编号为1的有25行。由于单元格都是加密的,只能解密后赋值给var。 但是这些动作都很快,25个var赋值完毕后,就开始慢了。
|
|
-- 作者:有点甜 -- 发布时间:2019/1/30 13:26:00 -- 具体实例,发上来测试。 |
|
-- 作者:lur320 -- 发布时间:2019/1/30 13:33:00 -- 实例太复杂了。要从系统里面剥离很多东西。 我把代码分为2段,1段给25个var赋值。耗时0.017秒 第二段代码在下面,第二段代码耗时3.35秒。 Dim st22 As Date = Date.Now If filterstring1="findpo1" Then Dim Book As New XLS.Book(ProjectPath & "Attachments\\ApprovalPR.xlsx") Dim fls As String = SpecialFolder.DesktopDirectory & "\\PR文件夹\\" & Vars("customername") & "-" & Vars("POname") & "(PR).pdf" If FileSys.DirectoryExists( SpecialFolder.DesktopDirectory & "\\PR文件夹")=False Then FileSys.CreateDirectory( SpecialFolder.DesktopDirectory & "\\PR文件夹") End If Dim newfname As String newfname=Vars("customername") & "-" & Vars("POname") & "(PR).pdf" ShowAppWindow(newfname,5) Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表 With Sheet.PrintSetting .PaperKind = 9 \'设为A4纸 .LandScape = True \'横向打印 .MarginTop=12 .MarginBottom=16 .AutoScale = True \'自动缩放 .FitPagesAcross = 1 \'垂直方向缩为1页 .FitPagesDown=1 End With Book.Build() \'生成细节区 Book.SaveToPDF(fls) \'保存为PDF文件 If podr IsNot Nothing And podr.Isnull("fileinfo")=False Then Dim ex As String ex=podr("fileinfo") fl = SpecialFolder.DesktopDirectory & "\\PR文件夹\\" & Vars("customername") & "-" & Vars("POname") & "(手工PO).zip" podr.SQLLoadFile("poattachment",fl) End If MessageBox.Show("耗时: " & (Date.Now - st22).TotalSeconds & "秒") |
|
-- 作者:lur320 -- 发布时间:2019/1/30 13:36:00 -- 更新了下代码。 Dim st1 As Date = Date.Now Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表 With Sheet.PrintSetting .PaperKind = 9 \'设为A4纸 .LandScape = True \'横向打印 .MarginTop=12 .MarginBottom=16 .AutoScale = True \'自动缩放 .FitPagesAcross = 1 \'垂直方向缩为1页 .FitPagesDown=1 End With Book.Build() \'生成细节区 Book.SaveToPDF(fls) \'保存为PDF文件 Dim st2 As Date = Date.Now \' If podr IsNot Nothing And podr.Isnull("fileinfo")=False Then Dim ex As String ex=podr("fileinfo") fl = SpecialFolder.DesktopDirectory & "\\PR文件夹\\" & Vars("customername") & "-" & Vars("POname") & "(手工PO).zip" podr.SQLLoadFile("poattachment",fl) End If th2.Start() MessageBox.Show("耗时: " & (Date.Now - st2).TotalSeconds & "秒") 0.01秒 MessageBox.Show("耗时: " & (st2 - st1).TotalSeconds & "秒") 黄字部分3.6秒 |
|
-- 作者:lur320 -- 发布时间:2019/1/30 13:40:00 -- Dim st2 As Date = Date.Now Book.Build() \'生成细节区 0.15秒 Dim st1 As Date = Date.Now Book.SaveToPDF(fls) \'保存为PDF文件 3.2秒 MessageBox.Show("耗时: " & (Date.Now - st1).TotalSeconds & "秒") MessageBox.Show("耗时: " & (st2 - st1).TotalSeconds & "秒") 终于查明了,但是为何?
|
|
-- 作者:有点甜 -- 发布时间:2019/1/30 13:41:00 --
[此贴子已经被作者于2019/1/30 13:41:35编辑过]
|