2017-12-11 8 views
0

Ich habe eine einfache hinzufügen, die einen Bereich kopiert und fügt es irgendwo anders. Alles funktioniert wie beabsichtigt, mit der Ausnahme, dass die Zellengrößen zurückgesetzt auf Standard bekommen ...Kopieren von Bereichen in Excel, aber halten Zellengrößen

Dies ist ein Ausschnitt verantwortlich für diesen Vorgang:

var excel = Marshal.GetActiveObject("Excel.Application") as Excel.Application; 

int index = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet.Index; 

Excel.Worksheet activeSheet = excel.Worksheets[index] as Excel.Worksheet; 
Excel.Worksheet newSheet = excel.Worksheets.Add(); 

Excel.Range toCopy = activeSheet.UsedRange; 
toCopy.Copy(); 
Excel.Range range = newSheet.Cells[1, 1] as Excel.Range; 
range.Select(); 
newSheet.Paste(); 

Nun, wie kann ich die Zellengrößen halte beim Kopieren und Einfügen von ihnen ?

+0

Haben Sie [PasteSpecial] (https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.pastespecial.aspx) für diese 'range' -Instanz mit' xlPasteAll' versucht als erstes Argument? – rene

+0

Durch Ändern der Zeile newSheet.Paste(); zu newSheet.PasteSpecial (Excel.XlpasteType.xlPasteAll); Ich laufe nun in System.Runtime.InteropServices.COMException: Exception von HRESULT: 0x800A03EC Ausnahme. Ich habe pasteSpecial noch nicht benutzt, da könnte mir hier etwas fehlen. –

+1

Der PasteSpecial-Wert auf dem Arbeitsblatt-Typ unterscheidet sich von dem auf Bereich. Aus diesem Grund habe ich ausdrücklich gesagt, dass ich es auf 'range' nennen soll. Range.PasteSpecial (xlPasteAll,/* füge bei Bedarf weitere Argumente hinzu * /)' – rene

Antwort

0

Aus irgendeinem Grund xlPasteAll nicht auf Zellenbreite nicht funktioniert, so ersetzte ich die Linie

newSheet.Paste(); 

mit den beiden

range.PasteSpecial(Excel.XlPasteType.xlPasteColumnWidths); 
range.PasteSpecial(Excel.XlPasteType.xlPasteAll); 

und jetzt funktioniert es.

Verwandte Themen