Ho un foglio di calcolo creato in modo programmatico con molti commenti (fino a 40.000). I commenti vengono ridimensionati dopo aver eliminato più colonne dal foglio di lavoro. Questo è apparentemente un bug in 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)Ridimensionamento dei commenti in Excel utilizzando ShapeRange
Idealmente mi piacerebbe AutoSize tutti i commenti in una volta dopo aver eliminato le colonne.
Tentando di evitare il looping di ogni singolo commento, ecco cosa ho provato fino ad ora.
- L'impostazione di AutoShapeDefaults non ha alcun effetto: i commenti vengono comunque ridimensionati dopo l'eliminazione delle colonne.
- Proprietà XlPlacement. XlMove e XLMoveAndSize non hanno alcun effetto.
- Worksheet.Shapes.SelectAll genera un'eccezione OutOfMemory non importa la quantità di commenti
Il mio pensiero è quello di ottenere un oggetto ShapeRange di tutti i commenti nel foglio di calcolo e impostare la dimensione da lì.
Questo funziona perfettamente:
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;
}
La modifica a questa genera un "eccezione da HRESULT: 0x800A03EC" eccezione alla linea AutoSize.
ShapeRange sRange = objSheet.Shapes.Range[test];
sRange.TextFrame.AutoSize = true;
Usando la mia attuale gamma di indici di forma tiri la stessa eccezione, ma a Shapes.Range []. Ho guardato le forme variabile durante il debug ed è identico al prova tranne che è int [249] anziché int [5];
int[] shapes = (int[])shapes.ToArray(typeof(int));
ShapeRange sRange = objSheet.Shapes.Range[shapes];
Forse questo dovrebbe essere una risposta, ma non è una risposta, così commenta: [ShapeRange.TextFrame è di sola lettura] (http://msdn.microsoft.com/en-us/library/ office/ff838224.aspx), quindi per applicare l'autosize è necessario scorrere l'array. Suppongo che ci sia qualcosa di sbagliato in 'int [] shapes = (int []) shapes.ToArray (typeof (int));' Perché ho tentato di replicare il tuo metodo in VBA e ho potuto generare correttamente un ShapeRange di 50000 commenti subito. Tuttavia, se tento di selezionare 50001 (con solo 50000 forme) attiva lo ** stesso errore ** di AutoSize. Assicurati che l'array sia valido. –