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

本文关键字:为单位 Excel 方式 编程 设置 单元格 | 更新日期: 2023-09-27 18:16:17

我打算用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。

我该如何解决这个案子?

谢谢你,

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

Excel中的列宽是以"Characters"指定的,而不是"Points"。默认列宽为8.37 "Characters", 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;
}

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

注意:在上面的代码中,xl: Excel应用对象ws:工作表对象