2016-11-03 39 views
3

我打算從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.ActiveSheet; 
oSheet.Columns.ColumnWidth = 5; 
oSheet.Rows.RowHeight = 5; 
oSheet.Cells[1, 1] = "Smith"; 
... 

的問題是,我需要(5)所有單元設置釐米的確切大小。 ColumnWidth屬性收到點數而不是釐米。在各種文章中,我發現1點= 0.035釐米,即1釐米= 28.57釐米,但當我通過5 * 28.57的ColumnWidthRowHeight時,Excel的列設置爲28.58釐米,行設置爲5.04釐米。

我該如何解決這種情況?

謝謝

回答

0

在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:表對象

相關問題