2012-11-28 36 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

相关问题