2012-11-28 40 views
1

我有一個寬合併的單元格,顯示工作表的標題。我還有一個彩色文本框,我想立即放在合併單元格中文本的右側。Excel Interop以單元格內的文本像素爲單位獲取寬度

標題的寬度是可變的,所以我使用了一個非常寬的合併單元格。

sheet.Range["A2"].Value = title; 
//Red Square 
sheet.Shapes.Item("redSquare").Left += 0; // Position sheet.Range["A2"].TextWidth ??? 

是否有我可以在Range上訪問的屬性,它會給我合併單元格中文本的像素的實際文本寬度?

回答

3

據我所知,Interop中沒有任何內容會告訴你以像素爲單位的文本寬度,但可以通過以下方法來實現。它似乎返回一個合理類似於Excel根據相同字體設置的列寬度的值。

Excel.Range xlRange = sheet.get_Range("A2"); 
Excel.Font xlFont = xlRange.Font; 
string fontName = xlFont.Name; 
double fontSize = xlFont.Size; 
Font font = new Font(fontName, (float)fontSize); 
float width = Graphics.FromImage(new Bitmap(1, 1)).MeasureString(title, font).Width; 

您可能需要在這裏和那裏添加幾個像素,以確保您的文本清除文本的結束,但我認爲這是關於準確,你會得到。

+0

感謝您的幫助,我最終保存了原始列的寬度,自動調整爲文本,獲取列寬然後恢復。 – jimmyjambles

相關問題