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

如何通过编程(C#)设置Excel单元格的精确大小(以厘米为单位)?,c#,excel,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.Acti

我打算从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时,
ColumnWidth
RowHeight
,Excel的列设置为28.58cm,行设置为5.04cm

我怎样才能解决这个案子


谢谢,

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

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

double x = xl.Application.CentimetersToPoints(5);
然后使用一个循环将列宽重复减少0.1个点,直到它与点数(x)匹配。(对于宽度大于“x”点的列)

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

while(ws.Columns.ColumnWidth+0.1<点)
{
ws.Columns.ColumnWidth=ws.Columns.ColumnWidth+0.1;
}
由于循环的原因,上面的方法需要几秒钟才能执行。但是,它实现了解决方案(以厘米为单位设置列宽)

注:在上述代码中, xl:Excel应用程序对象 工作表对象

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