Problem beim Ausschneiden von Zellen in Excel mit C#
-
Ich arbeite in C# mit der Excel-"Fernsteuerung" und habe die Variablen
Microsoft.Office.Interop.Excel.Application excel; Microsoft.Office.Interop.Excel.Worksheet sheet;
Nun möchte ich gern einen Bereich ausschneiden und löschen. Ich hab die Markierung mit
sheet.Cells.get_Range(Sheet.Cells[5, 4], Sheet.Cells[6, 10]).Select();
schon hinbekommen, aber das Ausschneiden funktioniert nicht. Ich habe
(excel.Selection as Microsoft.Office.Interop.Excel.Range).Cut();
ausprobiert, aber diese Funktion will einen Parameter für die Destination, während das VB-Makro innerhalb von Excel dort nur
Range("D5:J6").Select Selection.Cut
zu stehen hat. Wenn ich
Microsoft.Office.Interop.Excel.Range r = sheet.Cells.get_Range(sheet.Cells[5, 4], sheet.Cells[6, 10]); r.Select(); (excel.Selection as Microsoft.Office.Interop.Excel.Range).Cut(r);
schreibe, bringt das auch nichts. Da kommt in Excel dann eine Abfrage-Message-Box, doch ausgeschnitten wird nichts.
Wie kann ich also etwas in Excel per C# ausschneiden?
Und warum, verdammt noch mal, ist jeder Parameter bei diesem Excel-Zeug vom Typ object?
-
Wenn Du einen Bereich "ausschneidest", wird dieser in die Zwischenablage kopiert, nicht gelöscht. Wähle doch mal zur Probe eine Zelle in Excel aus und drücke Strg+X. Was passiert? Nicht viel... Dein Code tut das, was Du ihm gesagt hast.
Du kannst einen Bereich auch direkt ausschneiden, oder löschen (Delete()), ohne ihn vorher über Select() ausgewählt zu haben.
Übrigens, im Parameter für die Cut-Methode kannst du den Bereich angeben, in dem der ausgeschnittene Bereich eingefügt werden soll:
object missing = Type.Missing; Range firstCell = worksheet.get_Range("A1", missing); Range secondCell = worksheet.get_Range("A2", missing); firstCell.Cut(secondCell);
Dieser Parameter ist optional, Du kannst also auch "missing" angeben.
C# ist nich VBA. Manches ist nicht so einfach (mehr Tipparbeit), dafür konzeptuell viel genauer. Ein Blick in die Excel Primary Interop Assembly Reference lohnt sich auf jeden Fall.
-
Vielen Dank für deine Hinweise. Ich hab's jetzt hinbekommen.