我有一个以编程方式创建的电子表格,其中有很多注释(最多40,000)。从工作表中删除多个列之后,这些注释会被调整大小。这显然是excel中的一个错误。 (http://answers.microsoft.com/en-us/office/forum/office_2007-excel/excel-comment-boxes-resizing-themselves-andor/3fdf3e72-6ca5-4186-a656-b7b6fd8db781?msgId=d55534a5-4603-482e-ac97-9ec260124f78)使用ShapeRange在Excel中调整注释的大小
理想情况下,我想在删除列后立即自动调整所有注释的大小。
试图避免通过每个单独的评论循环,这是我到目前为止尝试过的。
- 设置AutoShapeDefaults不起作用 - 评论在删除列后仍然会调整大小。
- XlPlacement属性。 XlMove和XLMoveAndSize不起作用。
- Worksheet.Shapes.SelectAll抛出内存溢出异常无论
我的想法是让在电子表格中所有评论的ShapeRange对象,并从那里设置大小的评论量。
这完美的作品:
public static void ResizeComments()
{
Microsoft.Office.Interop.Excel.Workbook objWorkbook;
objWorkbook = (Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
Worksheet objSheet = (Worksheet)objWorkbook.ActiveSheet;
int[] test = {1,2,3,4,5};
ShapeRange sRange = objSheet.Shapes.Range[test];
sRange.Height = 100;
sRange.Width = 220;
}
改变这种 “从HRESULT异常:0x800A03EC” 抛出一个异常的自动尺寸线。
用我的实际形态指标数组抛出同样的异常,但在Shapes.Range []。 我看的形状调试时变量和它的相同测试除了它的INT [249]代替INT [5];
int[] shapes = (int[])shapes.ToArray(typeof(int));
ShapeRange sRange = objSheet.Shapes.Range[shapes];
或许,这应该是一个答案,但它不是一个答案,所以评论:[ShapeRange.TextFrame是只读](http://msdn.microsoft.com/en-us/library/ office/ff838224.aspx)所以要应用autosize你将不得不遍历数组。我假设'int [] shapes =(int [])shapes.ToArray(typeof(int));''因为我试图在VBA中复制你的方法,并且可以成功地生成50000条评论的ShapeRange立刻。但是,如果我尝试选择50001(只有50000个形状),它会引发与使用AutoSize相同的错误**。确保数组有效。 –