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

我打算从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.035厘米,即1厘米= 28.57厘米,但是当我通过5 * 28.57的ColumnWidthRowHeight ,Excel的列设置为28.58厘米,行设置为5.04厘米。

我怎样才能解决这个案子?

谢谢,

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

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

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

然后使用一个循环重复减less0.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; } 

上面的方法由于循环需要几秒钟执行。 但是,它实现了解决scheme(以厘米为单位设置列宽)。

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