Foxtable(狐表)用户栏目专家坐堂 → excel报表中如何获取字体的宽度和高度?


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

主题:excel报表中如何获取字体的宽度和高度?

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


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/22 22:12:00 [只看该作者]

就一列的内容,有什么特别的理由一定要使用合并单元格么。

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


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/22 23:21:00 [只看该作者]

日期设置参考:http://www.foxtable.com/webhelp/scr/1392.htm

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自动行高打印测试.zip



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


加好友 发短信
等级:狐精 帖子:3355 积分:24726 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2017/9/23 12:37:00 [只看该作者]

这个只是做了个例子 实际项目比这个要复杂

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


加好友 发短信
等级:狐精 帖子:3355 积分:24726 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2017/9/23 13:17:00 [只看该作者]

蓝版 我将你的代码做了修改

Dim rg As MSExcel.Range
                Dim tempWs = wb.WorkSheets.Add
                Dim tempCell As MSExcel.Range = tempWs.Cells(1, 1)
                Dim Strike As Boolean
                For Each rg In ws.UsedRange
                    If rg.MergeCells AndAlso rg.MergeArea.Columns.count>1 Then

我的意思是如果是合并单元格并且合并列数大于1 就进行后面自动行高的设置

但是执行的时候出现了这样的报错


图片点击可在新窗口打开查看此主题相关图片如下:tim截图20170923131246.png
图片点击可在新窗口打开查看



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


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/23 14:11:00 [只看该作者]

12楼例子我测试没有问题。肯定是其它地方的代码不对


[此贴子已经被作者于2017/9/23 17:27:12编辑过]

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


加好友 发短信
等级:狐精 帖子:3355 积分:24726 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2017/9/23 17:17:00 [只看该作者]

例子确实没问题 但是代码改了以后放到我的项目里就不行  我只修改了这个判断条件 其他都没改
 Dim rg As MSExcel.Range
                Dim tempWs = wb.WorkSheets.Add
                Dim tempCell As MSExcel.Range = tempWs.Cells(1, 1)
                Dim Strike As Boolean
                For Each rg In ws.UsedRange
                    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
                        If (rg.RowHeight < tempcell.RowHeight) Then
                            Dim tempHeight As Double
                            Dim tempCount As Integer
                            tempHeight = tempcell.RowHeight
                            tempCount = rg.MergeArea.Rows.Count
                            For Each addHeightRow As object In rg.MergeArea.Rows
                                If (addHeightRow.RowHeight < tempHeight / tempCount) Then
                                    addHeightRow.RowHeight = tempHeight / tempCount + 10
                                End If
                                tempHeight = tempHeight - addHeightRow.RowHeight
                                tempCount = tempCount - 1
                            Next
                            rg.WrapText = True
                        End If
                    End If
                Next
                app.DisplayAlerts = False
                tempWs.Delete
               app.visible = True
            catch ex As exception
                msgbox(ex.message)
                app.quit
            End try
            


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


加好友 发短信
等级:狐精 帖子:3355 积分:24726 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2017/9/23 17:24:00 [只看该作者]

找到问题了  写保护导致的  现在产生一个新的问题 不加这个代码生成报表2秒左右 加了代码需要将近1分钟才能生成报表  我看了下进程excel CPU飙到30% 内存飙到100M+

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


加好友 发短信
等级:超级版主 帖子:106199 积分:540118 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/23 17:28:00 [只看该作者]

这个没有办法,要遍历所有单元格进行判断。

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


加好友 发短信
等级:狐精 帖子:3355 积分:24726 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2017/9/23 18:15:00 [只看该作者]

我觉得十秒左右可以接受 我这I7的要1分多钟 分公司很多奔腾酷睿双核的不知道要多久

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


加好友 发短信
等级:狐精 帖子:3355 积分:24726 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2017/9/23 18:22:00 [只看该作者]

大佬们看看还有哪里可以优化的地方 我找了台笔记本 打开报表需要3分钟 这效率太低了

 回到顶部
总数 21 上一页 1 2 3 下一页