用于将Excel列宽计算/转换为Word表列宽的公式/算法

时间:2019-06-04 12:44:39

标签: c# excel ms-word openxml openxml-sdk

我正在寻找可以将Excel列宽转换为Word表宽的公式。 示例:在excel中创建一个简单表,更改列的宽度。最后,将其复制/粘贴到MS Word文档中。

检查显示的两个文件。

MS Excel:

<x:cols>
    <x:col min="1" max="1" width="3.77734375" customWidth="1" />
    <x:col min="2" max="2" width="10.21875" customWidth="1" />
    <x:col min="3" max="3" width="12.77734375" customWidth="1" />
  </x:cols>

MS Word:

<w:tblGrid>
      <w:gridCol w:w="454" />
      <w:gridCol w:w="1100" />
      <w:gridCol w:w="1380" />
</w:tblGrid>

请有人帮我或指导我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

单词的列宽存储为点的二十分之一。您可能会发现本文具有启发性,http://officeopenxml.com/WPtableGrid.php

Excel不使用度量​​单位,因此充其量很难进行1:1转换。 Excel的宽度取决于所使用的字体大小。 Word不会这样做(除非将表属性设置为扩展以适合内容)。

https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.column?view=openxml-2.8.1width (Column Width)

  

以最大位数的字符数衡量的列宽   数字0、1、2,...,9的宽度,以常规样式的   字体。边距填充有4个像素(每侧两个),外加1   网格线的像素填充。

     

width =截断([{字符数} * {最大数字宽度} + {5   像素填充}] / {最大位数宽度} * 256)/ 256

     

[示例:以Calibri字体为例,最大位数   11点字体大小的宽度为7像素(在96 dpi时)。实际上,每个   数字与该字体的宽度相同。因此,如果像元宽度为   宽度为8个字符,此属性的值必须为   截断([8 * 7 + 5] / 7 * 256)/ 256 = 8.7109375。结束示例]

     

将文件中的width值转换为列宽   运行时的值(以像素表示),请使用以下计算:

     

=截断((((256 * {width} +截断(128 / {最大位数   宽度})/ 256)* {最大数字宽度})

     

[示例:使用与上述相同的示例,计算结果为   截断((((256 * 8.7109375 +截断(128/7))/ 256)* 7)= 61像素。结束   例子]

     

要从像素转换为字符宽度,请使用以下计算:

     

=截断(({pixels} -5)/ {Maximum Digit Width} * 100 + 0.5)/ 100

     

[示例:使用上面的示例,计算将为   截断((61-5)/7*100+0.5)/ 100 = 8个字符。结束示例]

     

[注意:应用宽边框时,左/右边框的一部分   必须与两侧的2个像素填充重叠。宽广的边界   不影响列的宽度计算。结束语]

     

[注意:当工作表处于查看公式而不是查看公式的模式时   值,列的像素宽度加倍。结束语]

     

此属性的可能值由W3C XML定义   模式double数据类型。

以下http://polymathprogrammer.com/2010/01/18/calculating-column-widths-in-excel-open-xml/可能也很有用,它提供了用于执行上面第一个方程式中的计算的代码。