我打算从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个字符的宽度。

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

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:工作表对象

关于c# - 如何以编程方式(C#)为Excel单元设置确切的尺寸(以厘米为单位)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40396185/

10-09 09:30