Excel行高列宽及其它

今天参照纸质费用报销单制作了相应的Excel电子版,以备不时之需。制作过程不算顺利,主要问题是Excel行高列宽与实际长度间的对应关系。整理所得成文。

A4纸的尺寸

A4纸是我们日常办公中使用频率最高的纸张类型了。但为什么要叫A4纸呢?看了下图您就明白了:
A系列纸张格式

上图描述了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对单元格提供了WidthColumnWidth属性。其中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

现在我们采集两种情况,即可列出二元一次方程组,解得charWidthspaceWidth
获得了charWidthspaceWidth,我们就可以得到下面的等量式:

  • n列宽=charWidth*n+spaceWidth磅

对于Excel默认的字体12号宋体,在DPI为96的情况下,可算得:

  • charWidth=6磅
  • spaceWidth=3.75磅

之所以加上DPI的限制,是因为spaceWidth是以像素形式确定的。当DPI发生改变后,以为单位的spaceWidth自然会发生变化。
既然如此,更好的做法是找到列宽与像素之间的关系。如上所述,假设列宽值为columnWidth,像素值为pixel,亦有下式成立:

  • charWidth=(pixel-spaceWidth)/columnWidth

不同的是,这里的charWidthspaceWidth以像素为单位。
由于在鼠标拖拽更改列宽时,Excel同时提供了列的实时列宽值和像素值,所以采集两组(columnWidth, pixel)值对是轻而易举的。
列出二元一次方程组,解得charWidthspaceWidth,即可获得下面的等量式:

  • n列宽=charWidth*n+spaceWidth像素

对于Excel默认的字体12号宋体,可算得:

君子爱财,取之有道;弱水三千,只取一元
0%