簡體   English   中英

如何以編程方式(C#)為Excel單元格設置精確大小(以厘米為單位)?

[英]How can I set an exact size (in centimeters) for an Excel cell programatically (C#)?

我打算從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個字符的寬度。

要以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;
}

由於循環,上述方法需要幾秒鍾才能執行。 但是,它實現了解決方案(以cm為單位設置列寬)。

注意:在上面的代碼中,xl:Excel應用程序對象ws:Worksheet對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM