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


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

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


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


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

是build慢


 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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赋值完毕后,就开始慢了。

 回到顶部
帅哥哟,离线,有人找我吗?
lur320
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | 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 & "秒")

终于查明了,但是为何?

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


加好友 发短信
等级:五尾狐 帖子:1030 积分:8973 威望:0 精华:0 注册:2015/8/12 16:28:00
  发帖心情 Post By:2019/1/30 14:40:00 [显示全部帖子]

似乎xps会快一些。可以另存为xps么?


 回到顶部