繁体   English   中英

如何以编程方式(C#)为Excel单元格设置精确大小(以厘米为单位)?

[英]How can I set an exact size (in centimeters) for an Excel cell programatically (C#)?

我打算从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,但是当我为ColumnWidthRowHeight传递5 * 28.57时,Excel的列设置为28.58cm,行设置为5.04cm。

我该如何解决这个案子?

谢谢,

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

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

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;
}

由于循环,上述方法需要几秒钟才能执行。 但是,它实现了解决方案(以cm为单位设置列宽)。

注意:在上面的代码中,xl:Excel应用程序对象ws:Worksheet对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM