设置:打开Excel 2007,将第一列的宽度设置为15.0(110 px),将第一行的高度设置为30.0(40 px),将第一个单元格中的窗口窗格分成四个,然后保存文件。
使用Open XML SDK 2.0 Productivity Tool打开文件时,列宽为“15.7109375”,高度为“30”,但xSplit值为“2040”,ySplit值为“795”。
有人可以解释如何将“15.0”转换为“110 px”至“15.7109375 width”至“2040 xSplit”作为列,将“30.0”改为“40 px”至“30 ht”转换为“795 ySplit” “对于行?
如何计算这些数字并从一个转换为另一个?
答案 0 :(得分:1)
我最近不得不在一个开源项目中解决这个问题,所以我想我会在这里发布一个答案来帮助遇到同样问题的其他人。
内部色谱柱宽度的计算记录在ECMA-376第1部分和elsewhere中。
内部行高与Excel界面中显示的高度相同。
拆分窗格xSplit和ySplit尺寸是棘手的。我没有找到任何关于它们如何计算的具体文档,除了它们以1/20的单位为单位。这些计算我从xlsx文件中提取的插值数据和xls文件格式中使用的类似计算中推导出来。
以下是Perl中演示计算的示例:
#!/usr/bin/perl -l
use warnings;
use strict;
my $width = 15;
my $height = 30;
print "Column width in characters = ", calculate_column_width( $width );
print "Column width for xSplit = ", calculate_x_split_width( $width ), "\n";
print "Row height in characters = ", $height;
print "Row height for ySplit = ", calculate_y_split_height( $height );
#
# Convert column width from user units to character width.
#
sub calculate_column_width {
my $width = shift;
my $max_digit_width = 7; # For Calabri 11.
my $padding = 5;
$width = ( $width * $max_digit_width + $padding ) / $max_digit_width;
$width = int( $width * 256 ) / 256;
return $width;
}
#
# Convert column width from user units to pane split width.
#
sub calculate_x_split_width {
my $width = shift;
my $max_digit_width = 7; # For Calabri 11.
my $padding = 5;
my $pixels;
# Convert to pixels.
if ( $width < 1 ) {
$pixels = int( $width * 12 + 0.5 );
}
else {
$pixels = int( $width * $max_digit_width + 0.5 ) + $padding;
}
# Convert to points.
my $points = $pixels * 3 / 4;
# Convert to twips (twentieths of a point).
my $twips = $points * 20;
# Add offset/padding.
$width = $twips + 390;
return $width;
}
#
# Convert row height from user units to pane split height.
#
sub calculate_y_split_height {
my $height = shift;
$height = int( 20 * $height + 300 );
return $height;
}
__END__
这个输出是:
Column width in characters = 15.7109375
Column width for xSplit = 2040
Row height in characters = 30
Row height for ySplit = 900
请注意,ySplit值与您问题中的值不同。但它确实与我尝试过的几个样本xlsx文件中提取的值相关联。也许,您的示例文件使用了不同的默认字体高度。