Mam arkusz kalkulacyjny, który jest tworzony programowo z wieloma komentarzami (do 40 000). Komentarze zostaną zmniejszone po usunięciu kilku kolumn z arkusza roboczego. To najwyraźniej błąd w Excelu. (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)Zmiana rozmiaru komentarzy w programie Excel za pomocą ShapeRange
Idealnie chciałbym AutoSize wszystkie komentarze naraz po usunięciu kolumn.
Próba uniknięcia zapętleń w poszczególnych komentarzach, oto, co próbowałem do tej pory.
- Ustawienie AutoShapeDefaults nie ma wpływu - komentarze są nadal zmieniane po usunięciu kolumn.
- Właściwość XlPlacement. XlMove i XLMoveAndSize nie mają żadnego efektu.
- Worksheet.Shapes.SelectAll zgłasza wyjątek OutOfMemory bez względu na ilość komentarzy
Moja myśl jest, aby obiekt ShapeRange wszystkich uwag zawartych w arkuszu kalkulacyjnym i ustawić rozmiar stamtąd.
Działa to doskonale:
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;
}
Zmiana tego zgłasza wyjątek "wyjątek od HRESULT: 0x800A03EC" na linii autoSize.
ShapeRange sRange = objSheet.Shapes.Range[test];
sRange.TextFrame.AutoSize = true;
Stosując mi rzeczywistego kształtu tablicy wskaźników zgłasza wyjątek tego samego ale Shapes.Range []. Sprawdziliśmy w kształtach zmiennej trakcie debugowania i jest identyczny testu wyjątkiem to Int [249] zamiast Int [5];
int[] shapes = (int[])shapes.ToArray(typeof(int));
ShapeRange sRange = objSheet.Shapes.Range[shapes];
Może powinien to być odpowiedź, ale to nie jest odpowiedź, więc komentarze: [ShapeRange.TextFrame jest tylko do odczytu] (http://msdn.microsoft.com/en-us/library/ office/ff838224.aspx), więc aby zastosować autosize, będziesz musiał przejść przez tablicę. Zakładam, że coś musi być nie tak z kształtami int [] shapes = (int []). ToArray (typeof (int)); 'Ponieważ próbowałem replikować twoją metodę w VBA i mogłem z powodzeniem wygenerować ShapeRange z 50000 komentarzy natychmiast. Jednakże, jeśli spróbuję wybrać 50001 (z tylko 50000 kształtami), wystrzeliwuje ** ten sam błąd ** jak przy użyciu AutoSize. Upewnij się, że tablica jest poprawna. –