今天参照纸质费用报销单制作了相应的Excel电子版,以备不时之需。制作过程不算顺利,主要问题是Excel行高列宽与实际长度间的对应关系。整理所得成文。
A4纸的尺寸
A4纸是我们日常办公中使用频率最高的纸张类型了。但为什么要叫A4纸呢?看了下图您就明白了:
上图描述了A系列纸张的格式,这是由国际标准化组织(ISO)在ISO 216
标准中规定的。除了A系列纸张,该标准还规定了B系列和C系列纸张。
A系列纸张的长宽比一律为$1:\sqrt{2}$,长宽数值精确到毫米,未满毫米的部分舍去。规定A0纸的面积为一平方米,后续的A1、A2、A3直至An等纸张都由前一编号纸张沿长边对折所得。
依定义可推出An纸张尺寸公式:
- 短边=$2^{-1/4-n/2}$米
- 长边=$2^{1/4-n/2}$米
- 面积=$2^{-n}$平方米
根据公式可以得出应用最广泛的A4纸的尺寸:
- 短边=210毫米
- 长边=297毫米
像素与屏幕分辨率
像素的英文为Pixel
,是由单词Picture(图像)
和Element(元素)
组合而成,有时简写为Pel
。由此可推知像素大概是图像元素
的意思。
像素是数码影像的单位,准确来说是最小单位。一张数码图像是由一个个不可再分的携带颜色信息的点按照矩阵排布而成,我们称这些点为像素点。因此一张数码图像的大小就可由两个像素值表示,这两个像素值分别描述图像矩阵两边的像素点个数。
电脑屏幕用来显示影像信息,会有一个分辨率属性,比如1024*768
,这个属性说明了屏幕宽高的像素值。那么如何确定像素值与显示尺寸之间的关系呢?解决问题的关键是获得屏幕尺寸。
屏幕尺寸通常由屏幕对角线长度描述,比如屏幕大小为15吋
就表示屏幕对角线长度为15英寸。不过要想获得屏幕的长宽尺寸,首先还要得到屏幕的长宽比。
屏幕长宽比一般为4:3或16:9,我们称后者为宽屏
。
对于屏幕长宽比为4:3
,大小为15吋,屏幕分辨率设为1024*768
的电脑,其像素值与显示尺寸之间的关系如何呢?
首先根据勾股定律求出屏幕的长宽为:(12英寸,9英寸)
1英寸=2.54厘米,我们不常用英寸,可以将其转换为米制单位表示:(304.8毫米,228.6毫米)
而屏幕长宽的像素值为:(1024像素,768像素)
所以可得以下换算式:
- 1像素=9/768英寸≈0.0117英寸
- 1英寸=768/9像素≈85.333像素
- 1像素=228.6/768毫米≈0.298毫米
- 1毫米=768/228.6毫米≈3.360像素
不过值得注意的是,屏幕显示多大并不表示印刷后有多大。这里给出的换算式只适用于屏幕范围内,即屏幕影像像素值与显示尺寸值间的对应关系。要想获得实际点儿的东西还是往下看吧。
DPI的意义
DPI的全称是Dots Per Inch(点每英寸)
,是一个量度单位。一般来说,只要提到点
,都与印刷相关。实际上DPI主要用来衡量打印机的分辨率。
在计算机领域,有一个与之对应的单位:PPI(Pixels Per Inch),表示像素每英寸
。
不过DPI和PPI常出现混用现象。我们打开显示 属性
对话框,在设置
选项卡中点击高级
按钮,在弹出窗口的常规
选项卡中就可以看到关于DPI
的设置。这里的DPI
其实就是PPI
,表示每英寸的像素个数
。
通常电脑的DPI默认值为96,它表示每96像素相当于实际中的1英寸。
据此,我们可得以下换算式:
- 1像素=1/96英寸≈0.0104英寸
- 1英寸=96像素
- 1像素=1/96*25.4毫米≈0.265毫米
- 1毫米=96/25.4像素≈3.780像素
与上一部分的换算式进行比较,可以看出屏幕显示尺寸与实际印刷品尺寸间的差别。
磅的意义
我们经常在微软的Office工具中遇到磅
这个单位。磅
在这里当然与重量无关,凭感觉它应该是一个长度单位。磅
实际上是磅因
的缩写,而磅因
则是英文Point
的音译。Point
意译过来就是点
,它是一种特殊的长度单位,仅用于与印刷相关的地方,多数情况下缩写为Pt
。
现在我们知道了磅
这个单位的来源,再来看看它的大小吧:
- 1英寸=72磅
- 3.6磅=1.27毫米
- 1磅=1.27/3.6≈0.353毫米
- 1毫米=3.6/1.27≈2.835磅
现在还有一个问题:磅
与像素
间的关系。
相信聪明的您早已想到,它们的纽带就是DPI。
如果DPI值为96,即说明96像素=1英寸,而72磅=1英寸,所以可得:4像素=3磅;
同理,当DPI值设为120,则:5像素=3磅。
设DPI值为dpi,可得:
- 1像素=72/dpi磅
- 1磅=dpi/72像素
Excel中行高与列宽
在Excel中,行高的单位就是磅
,所以可得行高与米制单位间的换算式:
- 1行高=1.27/3.6≈0.353毫米
- 1毫米=3.6/1.27≈2.835行高
但是列宽就不那么简单了。
列宽以常规
样式中一个字符的宽度为单位。
通过格式
菜单,打开样式
对话框,选择常规
样式名,可查看常规
样式的字体类型(默认为12号宋体
)。而Excel的列宽就是以该字体的字符宽度为单位的。
这里有一个问题:字体分为等宽字体和比例字体(即不等宽字体);对于等宽字体自然无碍,但是比例字体如何确定字符宽度呢?在Excel的帮助中可以找到答案:
一个列宽单位等于
常规
样式中一个字符的宽度。对于比例字体,则使用字符0
(零)的宽度。
不过对于中文字体,似乎并非如此。拿方正舒体
做实验(因为方正舒体
的数字字符是不等宽的),将列宽调为10磅,却能容纳11个0
字符。我又尝试了一些英文字体,如Berlin Sans FB
,全都符合Excel帮助
中的说法。这里暂且存疑。
既然列宽单位会随常规
样式中字体类型的改变而改变,就不能直接通过列宽值
来确定实际长度了。
不过Excel的VBA对单元格提供了Width
和ColumnWidth
属性。其中Width
属性返回的宽度值以磅
为单位,而ColumnWidth
属性返回的就是列宽值。这样我们就可以用以下语句获得列宽单位与磅之间的转换系数(也即字体宽度charWidth)了:1
charWidth = Cells(1, 1).Width / Cells(1, 1).ColumnWidth
但是如果您足够细心,就会发现其中的错误。我们忽视了一个事实:单元格宽度不仅仅是其所能容纳字符宽度之和,它还包括字符串两边的空隙长度。
假设这个空隙长度为spaceWidth,则有下面的等式:1
charWidth = (Cells(1, 1).Width - spaceWidth) / Cells(1, 1).ColumnWidth
现在我们采集两种情况,即可列出二元一次方程组,解得charWidth
和spaceWidth
。
获得了charWidth
和spaceWidth
,我们就可以得到下面的等量式:
- n列宽=charWidth*n+spaceWidth磅
对于Excel默认的字体12号宋体
,在DPI为96的情况下,可算得:
- charWidth=6磅
- spaceWidth=3.75磅
之所以加上DPI的限制,是因为spaceWidth
是以像素形式确定的。当DPI发生改变后,以磅
为单位的spaceWidth
自然会发生变化。
既然如此,更好的做法是找到列宽与像素之间的关系。如上所述,假设列宽值为columnWidth
,像素值为pixel
,亦有下式成立:
- charWidth=(pixel-spaceWidth)/columnWidth
不同的是,这里的charWidth
和spaceWidth
以像素为单位。
由于在鼠标拖拽更改列宽时,Excel同时提供了列的实时列宽值和像素值,所以采集两组(columnWidth, pixel)
值对是轻而易举的。
列出二元一次方程组,解得charWidth
和spaceWidth
,即可获得下面的等量式:
- n列宽=charWidth*n+spaceWidth像素
对于Excel默认的字体12号宋体
,可算得: