OP 声明:
excel 应用程序 gui 将单元格的大小显示为:
宽度:8.28(160 像素) 高度:24.6(41 像素),字体为 Arial 20 pt.
首先让我澄清一下:应用程序 gui 以十进制测量和像素测量显示列宽和高度,而不管字体大小、屏幕大小、缩放等。对于这些因素中的任何一个,如果 Excel 列宽为 8.43,它将始终定义为 64 像素。其次,我有点困惑,因为我的 Excel 版本(目前是 2010 年)和我记得的每个先前版本的标准列宽 8.43 等于 64 像素;同样,标准行高 15 等于 20 像素,这似乎与 OP 的示例不匹配。
确定了这一点后,一位发帖人问“为什么?”一个原因:如果您正在调整列宽或行高,Excel 允许以离散单位 进行调整,不幸的是,他们决定将其命名为 像素。也许它们与某些早期版本中的像素有关,但它们似乎与使用的单位一样随机 - 8.43 是什么,英寸,皮卡,???不是twips,这是肯定的!在这里,我将其称为十进制单位。
无论如何,对于所有超过 1.00 的列宽,该离散 像素 单位是十进制单位的 1/7。奇怪的是,1.00 以下的列宽被分成 12 个单位。因此,直到小数点 2.00 的离散宽度如下:
0.08, 0.17, 0.25, 0.33, 0.42, 0.5, 0.58, 0.67, 0.75, 0.83, 0.92, 1.00,
1.14, 1.29, 1.43, 1.57, 1.71, 1.86, 2.00
2.00 等于 19 个像素。是的,当你难以置信地摇头时,我会停下来,但他们就是这样做到的。
幸运的是,行高似乎更均匀,1 像素 等于 0.75 个十进制单位; 10 像素 等于 7.50;标准行高 20 像素 等于 15.00;等等。以防万一您需要在这些随机离散的单位之间进行转换,这里有几个 VBA 函数可以做到这一点:
Function ColumnWidthToPixels(ByVal ColWidth As Single) As Integer
Select Case Round(ColWidth, 4) ' Adjust for floating point errors
Case Is < 0:
ColumnWidthToPixels = ColumnWidthToPixels(ActiveSheet.StandardWidth)
Case Is < 1:
ColumnWidthToPixels = Round(ColWidth * 12, 0)
Case Is <= 255:
ColumnWidthToPixels = Round(12 + ((Int(ColWidth) - 1) * 7) _
+ Round((ColWidth - Int(ColWidth)) * 7, 0), 0)
Case Else:
ColumnWidthToPixels = ColumnWidthToPixels(ActiveSheet.StandardWidth)
End Select
End Function
Function PixelsToColumnWidth(ByVal Pixels As Integer) As Single
Select Case Pixels
Case Is < 0:
PixelsToColumnWidth = ActiveSheet.StandardWidth
Case Is < 12:
PixelsToColumnWidth = Round(Pixels / 12, 2)
Case Is <= 1790:
PixelsToColumnWidth = Round(1 + ((Pixels - 12) / 7), 2)
Case Else:
PixelsToColumnWidth = ActiveSheet.StandardWidth
End Select
End Function