以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码优化  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=107250)

--  作者:rjh4078
--  发布时间:2017/9/24 9:26:00
--  代码优化
这是蓝版帮忙写的一个实现excel自动行高的代码 可以实现需求但是效率有点低 打开一个报表需要1-3分钟 重开一贴请各位出出主意帮忙优化下
案例里的模板我尽量模拟和实际项目接近的情况,实际打印模板里面穿插了各种子表。案例做了简化,现在主要是解决效率问题。
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:自动行高打印测试2.zip





--  作者:rjh4078
--  发布时间:2017/9/24 14:55:00
--  
图片点击可在新窗口打开查看
--  作者:rjh4078
--  发布时间:2017/9/24 15:07:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动行高.zip

发个商业版的

--  作者:rjh4078
--  发布时间:2017/9/24 18:29:00
--  
图片点击可在新窗口打开查看
--  作者:有点甜
--  发布时间:2017/9/24 21:08:00
--  

这段代码影响速度,尽量把红色放到外面去,也就是,合并的列的宽度值固定值或者获取一次就好了。

 

引用的时候不用重复使用如 tempWs.Columns(1) 请定义一个变量记录,重复获取耗时的。

 

如果你的表格不是规则的,也就是宽度必须相对获取,那么没有优化空间了。

 

但,再怎么优化,处理一行也大概需要1秒左右。

 

 If rg.MergeCells AndAlso rg.MergeArea.Columns.count>1 Then
            rg.Font.Strikethrough = Strike \'设置删除线
            Dim width As Double = 0
            Dim tempCol
            For Each tempcol In rg.MergeArea.Columns
                width = width + tempcol.ColumnWidth
            Next

            tempWs.Columns(1).WrapText = True
            tempWs.Columns(1).ColumnWidth = width
            tempWs.Columns(1).Font.Size = rg.Font.Size
            tempcell.Value = rg.Value
            tempcell.RowHeight = 0
            tempcell.EntireRow.Activate
            tempcell.EntireRow.AutoFit


--  作者:有点甜
--  发布时间:2017/9/24 21:09:00
--  
 代码请自行优化。