2014-11-18 6 views
5

Ich möchte einfach ein Blatt in meiner Arbeitsmappe kopieren und einen anderen Namen geben.So kopieren Sie ein Blatt mit einem anderen Namen - C# und Excel-Interop

var pointName1 = workbook.Worksheets["PointName1"] as Worksheet; 
pointName1.Copy(); // How do I access this newly created sheet? 

Idealerweise würde ich fähig sein mag, ein Verfahren wie dieses

pointName1.CopyTo("New Sheet");

zu schreiben, wo ‚Neues Blatt‘ eine umbenannte Kopie von ‚PointName1‘ ist.

Manchmal ist PointName1 das einzige Blatt in der Arbeitsmappe, zu anderen Zeiten gibt es andere.

+0

mögliche Duplikate von [C# - So kopieren Sie ein einzelnes Excel-Arbeitsblatt von einer Arbeitsmappe in eine andere?] (Http://stackoverflow.com/questions/3808368/c-sharp-how-to-copy-a-single- Excel-Arbeitsblatt-aus-einem-Arbeitsbuch-zu-einem anderen) – MethodMan

+0

@DJKRAZE Ich muss innerhalb derselben Arbeitsmappe kopieren.Der von Ihnen angegebene Link (zusammen mit den meisten anderen auf SO) beschäftigt sich mit dem Kopieren in eine neue Arbeitsmappe. –

Antwort

7

Sie dies erreichen können in mehr Möglichkeiten - wahrscheinlich der einfachste Weg ist nach dem letzten Blatt zu kopieren und dann umbenennen mit dem Index:

Excel.Application xlApp = Marshal.GetActiveObject("Excel.Application") as Excel.Application; 
Excel.Workbook xlWb = xlApp.ActiveWorkbook as Excel.Workbook; 
Excel.Worksheet xlSht = xlWb.Sheets[1]; 
xlSht.Copy(Type.Missing, xlWb.Sheets[xlWb.Sheets.Count]); // copy 
xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET";  // rename 

ich glaube, das MSDN guide auch Ihre questi Antworten auf.

Wenn Sie den Index eines Blattes erhalten möchten, suchen Sie nach Worksheet.Index property.

3

Sie sollten die Kopierfunktion verwenden können, aber Sie können das Blatt im selben Schritt nicht umbenennen. Die MSDN Dokumentation zeigt die zusätzlichen Parameter:

pointName1.Copy(pointName1, Type.Missing); //Place a copy before the existing sheet 

Aus der Dokumentation: Wenn Sie nicht angeben, entweder vor oder nach, erstellt Microsoft Office Excel eine neue Arbeitsmappe, die das kopierte Blatt enthält.

Um das Blatt umzubenennen, müssen Sie einen Verweis auf das neue Blatt (nach Index oder Name) abrufen und die Name-Eigenschaft von worksheet verwenden, um den Namen zu ändern.

EDIT:

Wenn Sie den angezeigten Code Sie den Index des Originalblattes verwenden (da Sie die Kopie vor dem Original sind Platzierung):

int index = pointName1.Index; 
pointName1.Copy(pointName1, Type.Missing); 
Worksheet newWS = (Worksheet)xlApp.Worksheets[index]; 
+0

Ich möchte in das gleiche Blatt kopieren, nicht eine neue Arbeitsmappe erstellen. Wie kann ich in derselben Arbeitsmappe zuverlässig auf das neu erstellte Blatt zugreifen? –

+0

@JoeBauer Dieser Code kopiert es in das gleiche Notebook. Die Zeile aus der Dokumentation zeigt Ihnen warum. Wenn Sie den obigen Code verwenden, entspricht der Index dem Index, da der Code zuvor eingefügt wurde. – MikeH

+0

@JoeBauer Edit gemacht – MikeH

0

Der einfachste Weg ist es nach dem letzten Blatt zu kopieren, wie in der angenommenen Antwort dargestellt.

Bitte beachten Sie, dass, wenn die Excel-Datei ausgeblendete Blätter enthält, die Kopie zwischen den sichtbaren und den versteckten Blättern platziert wird. Daher werden die ausgeblendeten Blätter nach rechts verschoben.

Wenn Sie dann versuchen, den Namen mit xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET" festzulegen, werden Sie am Ende Ihr letztes verstecktes Blatt anstelle Ihrer neuen Kopie umbenennen.

Ich habe es geschafft, dies zu umgehen, indem ich auf die neue Kopie mit dem Namen: xlWb.Sheets["_oldName_ (2)"].Name = "NEW SHEET".

Ein anderer Fix, der Ihnen die Verwendung von xlWb.Sheets[xlWb.Sheets.Count].Name = "NEW SHEET" ermöglicht, besteht darin, alle Blätter vor dem Kopieren des gewünschten Blattes sichtbar zu machen.