1

我有一个显示工作表标题的宽合并单元格。我还有一个彩色文本框,我想将其立即放置在合并单元格中文本的右侧。

标题的宽度是可变的,所以我使用了一个非常宽的合并单元格。

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

是否有一个我可以在 Range 上访问的属性,它将为我提供合并单元格中文本的实际文本宽度(以像素为单位)?

4

1 回答 1

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;

您可能需要在这里和那里添加一些像素以确保您的文本框清除文本的结尾,但我认为它与您将获得的一样准确。

于 2012-11-29T21:42:03.290 回答