以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  excel行高与字体大小的对应关系  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=40539)

--  作者:东坡一剑
--  发布时间:2013/9/22 23:17:00
--  excel行高与字体大小的对应关系

我设计了一个利用Excel报表打印标签的项目,在实际使用过程中发现一个奇怪的现象:明明我在Excel中设置的行高是9,可是用output.show方法在foxtable中显示的行高却是12,excel与foxtable显示Excel行高的对应关系如下:

          excel          foxtable

          7               9

          8               10

          9               12

         10              13

         11              14

 

列宽就更离谱了,明明Excel设置的是10,foxtable却显示为17;

但是,字号又是一致的,Excel设置为8,foxtable也显示为8 ;

 

有没有哪位狐友精通这方面的知识,指教一二!

 

以书宋为列,能不能给出行高所能容纳的最大字体与行高的函数关系? 

 


--  作者:有点甜
--  发布时间:2013/9/22 23:22:00
--  
 楼主你直接说你遇到什么问题吧?是生成报表的时候和原先的不一样?上个例子。
--  作者:东坡一剑
--  发布时间:2013/9/22 23:36:00
--  

我的问题是已经根据内容的行数动态调整了报表的行高,从而使得报表始终保持恒定的高度,我想进一步根据已经调整好的行高来动态调整字体的大小,于是需要找到行高与所能容纳的最大(或最合适)字体大小之间的表达式关系,比如 "字体大小 = 行高 - 2.5”等等。另外,我确实想知道excel中设置的行高和列宽为什么和foxtable中用output.show方法获得的值不一样。

因为我的项目太大,又用的外部表,上列子不太方便,而这个问题似乎有没有例子都无所谓,所以劳驾了!

[此贴子已经被作者于2013-9-23 6:48:02编辑过]

--  作者:东坡一剑
--  发布时间:2013/9/23 8:13:00
--  

Dim fl As String = ProjectPath & "Reports\\标签.XLS"
Dim Book As New XLS.Book(fl)
Dim Sheet As XLS.Sheet = Book.Sheets(0)
\'output.Show("内容" & sheet(3,0).Value)
\'output.Show("行高" & sheet.rows(3).Height)
\'output.Show("列宽" & sheet.Cols(1).Width)
\'output.Show("字号" & sheet(3,1).Style.Font.Size)


For i As Integer = 0 To sheet.Rows.count - 1
    Dim fnt As New Font("黑体",12,FontStyle.Underline)
    sheet(i,0).Style.Font = fnt
    output.Show(sheet(i,0).Style.Font.Size)
Next

 

上面这段代码,注释掉的部分可以正常运行并显示正确的结果,红字部分会报错:未将对象引用设置到对象的实例

 

不知原因何在?有没有办法实现我想要的功能?


--  作者:Bin
--  发布时间:2013/9/23 8:50:00
--  
上个例子看看.
--  作者:东坡一剑
--  发布时间:2013/9/23 8:54:00
--  
显示不一样问题我查了下,应该是foxtable以像素为单位,但excel以磅(或点)为行高的单位,以字宽为列宽的单位。我将两者的数值换算了一下,9/12时刚好为标准值3/4,其它情况下都有偏差,估计是四舍五入造成的。不知我的理解是否正确?
--  作者:东坡一剑
--  发布时间:2013/9/23 9:15:00
--  

例子如下,请帮忙,先谢了!
 

 

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


--  作者:Bin
--  发布时间:2013/9/23 9:26:00
--  
循环部分错误是因为你代码错误,不可以这么赋值的.

For i As Integer = 0 To sheet.Rows.count - 1
    Dim fnt As New Font("黑体",12,FontStyle.Underline)
    Dim Style As XLS.Style = Book.NewStyle() \'定义新样式
    Style.Font = fnt
    For c As Integer = 0 To sheet.Cols.count - 1
        sheet(i,c).Style=Style
        output.Show(sheet(i,c).Style.Font.Size)
    Next
Next

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



--  作者:东坡一剑
--  发布时间:2013/9/23 9:37:00
--  

原来是基本概念没吃透。

谢谢专家!