我打算从 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 point = 0.035cm,意思是 1cm = 28.57p,但是当我为 ColumnWidth
和 RowHeight
传递 5*28.57 时,设置了 Excel 的列到 28.58 厘米,行设置为 5.04 厘米。
我该如何解决这个问题?
谢谢,
最佳答案
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;
}
由于循环,上述方法需要几秒钟才能执行。但是,它实现了解决方案(以厘米为单位设置列宽)。
注意:在上面的代码中, xl : Excel 应用程序对象 ws : 工作表对象
关于c# - 如何以编程方式 (C#) 为 Excel 单元格设置精确大小(以厘米为单位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396185/