2012-04-03 5 views
1

Wenn ich Range.Copy() für eine Spalte aufrufen und dann Range.Insert() vor einer anderen Spalte aufrufen, funktioniert es einwandfrei; Die ursprüngliche Spalte wird an die Stelle kopiert, an der ich sie haben möchte. Wenn ich jedoch Range.Insert() erneut aufrufe, ohne Range.Copy() erneut aufzurufen, fügt es eine neue Spalte an der gewünschten Stelle ein, aber ohne Ränder.C# Excel Interop - Borders verloren auf mehreren Range.Insert() s

Ich finde, wenn ich Range.Copy() jedes Mal aufrufen, ist die Ausgabe genau das, was ich will, aber es dauert etwa 5 mal so lang. Muss ich das wirklich tun?

Hier ist mein Code als Referenz:

Range sheetCols = sheet.Columns; 

... 

int col = routesStartCol; 
foreach (RouteObject route in loc.Routes) 
{ 
    Range thisCol = sheetCols[col]; com.Got(thisCol); 
    if (col == routesStartCol) 
     thisCol.Copy(); 
    else 
     thisCol.Insert(XlInsertShiftDirection.xlShiftToRight); 
    sheetCells[routeNameRow, col] = route.Name; 
    col++; 
} 

Antwort

0

Es sieht aus wie ich wirklich jedes Mal zu kopieren brauchen. Was es wirklich macht, wenn Sie NICHT kopieren, ist das Einfügen einer leeren Spalte, die standardmäßig einen Teil der Formatierung der Spalte nach links kopiert.

1
oRng1 = oSheet.get_Range("A1", "D1"); 
oRng2 = oSheet.get_Range("A2", "D2"); 
oRng1.Copy(oRng2); //copy r1 to r2 
//to insert above r2 
oRng2.Insert(Excel.XlInsertShiftDirection.xlShiftDown,Excel.XlInsertFormatOrigin.xlFormatFromLeftOrAbove);