以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  新增614行,耗时43秒,有没有更快速代码  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=114256)

--  作者:天一生水
--  发布时间:2018/2/1 18:22:00
--  新增614行,耗时43秒,有没有更快速代码

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

  


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

 

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


--  作者:有点甜
--  发布时间: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 & "秒")

--  作者:天一生水
--  发布时间:2018/2/1 18:46:00
--  

谢谢甜老师,用时2.5秒


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


--  作者:天一生水
--  发布时间: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


--  作者:有点甜
--  发布时间:2018/2/1 20:00:00
--  

word模板发上来测试。

 

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

 

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

 

 


--  作者:天一生水
--  发布时间:2018/2/1 20:26:00
--  

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

麻烦老师测试一下 

 

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


--  作者:有点甜
--  发布时间: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