想要看公式的直接到第二部分,第一部分内容均是官方文档,经过笔者多次查阅、验证,笔者认为官方文档在计算列款存在误导,实际使用与文档不一致,欢迎大家来指正本文在宽度计算的问题,谢谢。
一、EXCEL文档内两个重要的属性
(1)、sheetFormatPr对象类
属性 | 英文说明 |
baseColWidth (Base Column Width) | Specifies the number of characters of the maximum digit width of the normal style's font. See defaultColWidth description in this section for details on calculating this value. See the col element description, particularly the width attribute description, for more information on what is meant by "maximum digit width". The possible values for this attribute are defined by the W3C XML Schema unsignedInt datatype. |
defaultColWidth (Default Column Width) | Default column width measured as the number of characters of the maximum digit width of the normal style's font. If the user has not set this manually, then it can be calculated: If the user has set this manually, then there is no calculation, and simply a value is specified. The possible values for this attribute are defined by the W3C XML Schema double datatype. |
defaultRowHeight (Default Row Height) | Default row height measured in point size. Optimization so we don't have to write the height on all rows. When the row height of all rows in a sheet is the default value, then that value is written here, and customHeight is not set. If a few rows have a different height, that information is written directly on each row. However, if most or all of the rows in the sheet have the same height, but that height isn't the default height, then that height value should be written here (as an optimization), and the customHeight flag should also be set. In this case, all rows having this height do not need to express the height, only rows whose height differs from this value need to be explicitly expressed. The possible values for this attribute are defined by the W3C XML Schema double datatype. |
(2)、COl对象类
Defines column width and column formatting for one or more columns of the worksheet.
Attributes | Description |
width (Column Width) | Column width measured as the number of characters of the maximum digit width of the numbers 0, 1, 2, ..., 9 as rendered in the normal style's font. There are 4 pixels of margin padding (two on each side), plus 1 pixel padding for the gridlines. width = Truncate([{Number of Characters} * {Maximum Digit Width} + {5 pixel padding}]/{Maximum Digit Width}*256)/256 [Example: Using the Calibri font as an example, the maximum digit width of 11 point font size is 7 pixels (at 96 dpi). In fact, each digit is the same width for this font. Therefore, if the cell width is 8 characters wide, the value of this attribute must be Truncate([8*7+5]/7*256)/256 = 8.7109375. end example] (expressed in terms of pixels), use this calculation: =Truncate(((256 * {width} + Truncate(128/{Maximum Digit Width}))/256)*{Maximum Digit Width}) [Example: Using the same example as above, the calculation would be Truncate(((256*8.7109375+Truncate(128/7))/256)*7) = 61 pixels. end example] To translate from pixels to character width, use this calculation: =Truncate(({pixels}-5)/{Maximum Digit Width} * 100+0.5)/100 [Example: Using the example above, the calculation would be Truncate((61- 5)/7*100+0.5)/100 = 8 characters. end example] [Note: when wide borders are applied, part of the left/right border must overlap with the 2 pixel padding on each side. Wide borders do not affect the width calculation of the column. end note] [Note: When the sheet is in the mode to view formulas instead of values, the pixel width of the column is doubled. end note] The possible values for this attribute are defined by the W3C XML Schema double datatype. 列宽度,以数字 0、1、......、9 的最大数字宽度的字符数度量,以普通样式的字体呈现。边距填充有 4 个像素(每侧两个),加上网格线的 1 像素填充。
二 、要从像素转换为字符宽度,请使用此计算:
|
二、高度计算
EXCEL的高度在文档记录是以磅为单位的,sheetFormatPr类的defaultRowHeight是默认行高以磅为单位大小。
MAC WPS默认值:17.6磅 ( 默认字体:宋体 大小12磅), Windos WPS值:13.5磅 (默认字体:宋体 大小11磅)。
换算公式为:72磅=1英寸,1英寸=2.54厘米。
那么1磅=1/72英寸,而1英寸所含有PPI个像素,这里就不详细展开PPI的计算了,现在一般计算机默认为96,详细的计算可以自己百度。
因此磅到像素的转换为 : PX=(PT/72*PPI) (公式-1) 其中PX为像素 PT为磅
厘米到像素的转换为:PX= (mm/2.54*PPI) (公式-2) 其中PX为像素 mm为厘米
(1)MAC WPS计算 默认字体:宋体 大小12磅
高度为17.6磅的像素为 px=17.6/72*96 =23.46
高度为0.62厘米的像素为 px=0.62/2.54*96 =23.43 (此处的厘米数为wps上展示的,下同,和上述对比使用,有兴趣的同学可以根据宏获取磅值,再算像素)
(2)WINDOWS WPS计算 默认字体:宋体 大小11磅
高度为13.5磅的像素为 px=13.5/72*96 =18.00
高度为0.48厘米的像素为 px=0.48/2.54*96 =18.14
在WPS的若某行存在与默认不一样的高度时,在某行类的属性上ht就存在磅值,其计算方式与默认磅值相同。
三、宽度计算
要公式的看第二部分,这里(1)部分在说明官方文档的误导。
(1)官方文档说明
官方文档对defaultColWidth (Default Column Width) 默认列宽度的解释如下:
Default column width measured as the number of characters of the maximum digit width of the normal style's font.
If the user has not set this manually, then it can be calculated:
defaultColWidth = baseColumnWidth + {margin padding (2 pixels on each side, totalling 4 pixels)} + {gridline (1pixel)} (公式-3)
而在列的with计算说又如下:
Column width measured as the number of characters of the maximum digit width of the numbers 0, 1, 2, ..., 9 as rendered in the normal style's font.
There are 4 pixels of margin padding (two on each side), plus 1 pixel padding for the gridlines.width = Truncate([{Number of Characters} * {Maximum Digit Width} + {5 pixel padding}]/{Maximum Digit Width}*256)/256 (公式-4)
查阅官方文档我们知道EXCEL的列的默认字符个数是8,那么将默认字符8,Maximum Digit Width为X导入上述 (公式-4 )
(8X+5)/256X=256width
=》 width =(8X+5)/ X
=》 width = 8+5/X (公式-5)
在公式-5中 5/x为一个反函数,超过5以后随着X-Maximum Digit Width的变大,宽度几乎保持不变?我们从实际的应用中可以知道数字的宽度随着字体的变大,宽度也变大, 这个从EXCEL的文档中就可以轻易证实。
(2)宽度到像素计算
- MAC WPS计算 默认字体:宋体 大小12磅 defaultColWidth值:9.1428
宽度为9.1428的像素为 px=9.1428*8 =73.14 (so easy。。。。。上面balabala一大堆也没说清楚)
宽度为1.79厘米的像素为 px=1.79/2.54*96 =67.65
宽度为1.93厘米的像素为 px=1.93/2.54*96 =72.94 (同样的设置在windows下)
不知道WPS为何在MAC系统下计算的厘米数与WINDOWS下为何不同,难道是bug。不过73.14-67.65=5.49px(难道是2*padding+1gridlines)不计算在内,有懂WPS的人可以告诉我一下。当然对比两个系统下WPS还有其他差异,此处就不再一一描述来,总之研究WPS还是在WINDOWS下比较好(笔者被坑惨了,吐槽一下)。
- WINDOWS WPS计算 默认字体:宋体 大小11磅 defaultColWidth值:9
宽度width为9的像素为 px=9*8 =72.00
宽度为1.9厘米的像素为 px=1.9/2.54*96 =71.81
同样设置,在col上设置列宽时:宽度width为22.375的像素为 px=22.375*8 =179
宽度为4.74厘米的像素为 px=4.74/2.54*96 =179.14
至于defaultColWidth怎么计算出来,欢迎知道的专业人事告诉笔者一下,多谢。