如何在程序中以厘米为单位设置Excel单元格的精确大小(C#)?

3
我打算用C#向Excel写入一些信息。我正在使用的代码如下:
var oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = false;
var oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(""));
var oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;
oSheet.Columns.ColumnWidth = 5;
oSheet.Rows.RowHeight = 5; 
oSheet.Cells[1, 1] = "Smith";
...

问题在于我需要为所有单元格设置一个精确的厘米大小(5)。ColumnWidth属性接收的是点数而不是厘米。在多篇文章中,我发现1点=0.035cm,也就是说1cm=28.57p,但是当我将5*28.57传递给ColumnWidthRowHeight时,Excel的列被设置成了28.58cm,而行则被设置成了5.04cm。
如何解决这个问题?
谢谢。
1个回答

0

Excel中的列宽是以“字符”而非“点”来指定的。默认列宽为8.37个“字符”,其中1个字符是用于在Excel中显示普通文本的默认字体的1个字符宽度。

如果要以厘米为单位指定列宽,您需要先使用以下函数将厘米转换为点:

double x = xl.Application.CentimetersToPoints(5);

接下来使用一个循环,反复将列宽减少0.1个点,直到它与所需点数(x)相匹配。(对于宽度大于“x”点的列)

while(ws.Columns.ColumnWidth - 0.1 > points)
{
    ws.Columns.ColumnWidth = ws.Columns.ColumnWidth - 0.1;
}

然后使用另一个循环,重复增加列宽0.1点,直到它与点数(x)相匹配。(对于宽度小于“x”点的列)

while(ws.Columns.ColumnWidth + 0.1 < points)
{
    ws.Columns.ColumnWidth = ws.Columns.ColumnWidth + 0.1;
}

上述方法由于循环需要几秒钟才能执行,但它实现了解决方案(以厘米为单位设置列宽)。
注意:在上面的代码中, xl:Excel 应用程序对象 ws:工作表对象

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接