Foxtable(狐表)用户栏目专家坐堂 → 导出excel模板的报表速度过慢


  共有3474人关注过本帖树形打印复制链接

主题:导出excel模板的报表速度过慢

帅哥哟,离线,有人找我吗?
lur320
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
导出excel模板的报表速度过慢  发帖心情 Post By:2019/1/29 14:16:00 [只看该作者]

导出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文件


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/29 14:45:00 [只看该作者]

1、是build慢,还是savetopdf慢?

 

2、是不是你excel报表要生成的数据过多?

 

3、做个例子发上来测试。


 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2019/1/29 15:22:00 [只看该作者]

是build慢


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/29 15:37:00 [只看该作者]

以下是引用lur320在2019/1/29 15:22:00的发言:

是build慢

 

那就是你build的数据过多的原因。做个例子测试。看是否有优化空间。


 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2019/1/30 13:22:00 [只看该作者]

也还不算多,大约使用了25个var的变量,每个var都来自于数据库的25个行。这些行都有一个索引编号。
例如编号为1的有25行。由于单元格都是加密的,只能解密后赋值给var。

但是这些动作都很快,25个var赋值完毕后,就开始慢了。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/30 13:26:00 [只看该作者]

具体实例,发上来测试。

 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By: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 & "秒")

终于查明了,但是为何?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/30 13:41:00 [只看该作者]

 

[此贴子已经被作者于2019/1/30 13:41:35编辑过]

 回到顶部
总数 13 1 2 下一页