Foxtable(狐表)用户栏目专家坐堂 → 新增614行,耗时43秒,有没有更快速代码


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

主题:新增614行,耗时43秒,有没有更快速代码

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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
新增614行,耗时43秒,有没有更快速代码  发帖心情 Post By:2018/2/1 18:22:00 [只看该作者]

y2287958老师的代码,原贴:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=114054

  


图片点击可在新窗口打开查看此主题相关图片如下:666.jpg
图片点击可在新窗口打开查看

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:按被告新增行.table


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


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

Dim st As Date = Date.Now   '开始计时
If Forms("通知").Opened Then
    Dim t As Table = Forms("通知").Controls("Table1").Table
    Forms("通知").TimerEnabled = False
    t.StopRedraw
    For Each r As Row In Tables("批量增加_table1").GetCheckedRows
        For Each s As String In r("被告").split(",")
            Dim r2 As Row  = t.AddNew
            r2("案号") = r("案号")
            r2("被通知人") = s
            r2("审判程序") = r("审判程序")
            r2("诉讼地位") ="被告"
            Tables("通知_Table1").Current("制作日期") = Date.Now
        Next
    Next
    Tables("通知_table1").Sort = "制作日期,案号"
    t.ResumeRedraw
    Forms("通知").TimerEnabled = True
End If
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/2/1 18:46:00 [只看该作者]

谢谢甜老师,用时2.5秒


图片点击可在新窗口打开查看此主题相关图片如下:7777.jpg
图片点击可在新窗口打开查看


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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/2/1 18:52:00 [只看该作者]

甜老师,下面这段预览word报表代码,数据行614行,拉黑所有行预览,耗时22分钟,麻烦老师也给看一下!

谢谢!

 

Dim Result As DialogResult
Result = MessageBox.Show("将按照模板生成预览文书,但不会保存,可供打印!"& vbcrlf &"你可以选中多行行头,批量预览文书!"& vbcrlf &"是---预览"& vbcrlf &"否---返回", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    '预览和生成分开处理,用下面代码预览
   
    Dim tm As String  = ProjectPath & "Attachments\应诉通知书正本.doc" '指定模板文件
    With Tables("应诉通知书_table1")
        If .TopPosition > -1 Then '如果选定区域包括数据行
            Dim fileName As String = ProjectPath & "Reports\应诉通知书\预览.doc" '指定目标文件
            Dim wrt As New WordReport(Tables("应诉通知书_table1"),tm,fileName) '定义一个WordReport
            For i As Integer = .TopPosition To .BottomPosition
                Dim r As Row = .Rows(i)
                wrt.BuildOne(r)
                wrt.RecordsOnEachPage  =1
            Next
            wrt.Show() '显示报表
        End If
    End With
Else
    Return
End If


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


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

word模板发上来测试。

 

word报表的话,会有你说的问题,报表越复杂,生成的行数越多,耗时越久。

 

大数据量,建议还是用excel来做吧;如果要用word,也建议一个一个word的生成,而不是生成在一个大word里面(如,10行或者60行生成一个文件)

 

 


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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2018/2/1 20:26:00 [只看该作者]

10行17秒;60行30秒;再多就慢很多了

麻烦老师测试一下 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:66.rar


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


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

没办法,试试这样,一个一个的生成。

 

Dim Result As DialogResult
Result = MessageBox.Show("将按照模板生成预览文书,但不会保存,可供打印!"& vbcrlf &"你可以选中多行行头,批量预览文书!"& vbcrlf &"是---预览"& vbcrlf &"否---返回", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    '预览和生成分开处理,用下面代码预览
    Dim st As Date = Date.Now   '开始计时
    Dim tm As String  = ProjectPath & "Attachments\通知书正本.doc" '指定模板文件
    With Tables("通知_table1")
        If .TopPosition > -1 Then '如果选定区域包括数据行
            Dim prs As Integer = 20
            For p As Integer = 0 To math.Ceiling((.bottomposition-.Topposition+1) / prs) - 1
                Dim fileName As String = ProjectPath & "Reports\应诉通知书\预览" & p & ".doc" '指定目标文件
                Dim wrt As New WordReport(Tables("通知_table1"),tm,fileName) '定义一个WordReport
                For i As Integer =  p * prs To math.min(.bottomposition-.topposition,( p + 1) * prs - 1)
                    application.Doevents
                    Dim r As Row = .Rows(.Topposition +i)
                    wrt.BuildOne(r)
                    wrt.RecordsOnEachPage  =1
                Next
                wrt.quit
                Dim proc As new Process
                proc.File = filename
                proc.start
            Next
        End If
    End With
    MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")
Else
    Return
End If


 回到顶部