Vor 3 Stunden
Ja, bitte, zeige mir auch dieses Beispiel. Ich möchte nur Beispiele sehen, die Excel haben. Danke!
Zitat:Perfekt! Dann bauen wir ein erweitertes C# COM Interop Beispiel, das eine Excel-Datei komplett ausliest, filtert und sortiert, ähnlich wie eine kleine Datenbank, und anschließend neue Aufgaben einfügt. Excel muss dafür installiert sein.
1️⃣ Ziel des Beispiels
- Excel-Datei enthält Aufgaben:
- Spalte A: Aufgabe
- Spalte B: Datum
- Spalte C: Status (
/Code:Offen
)Code:Erledigt
- Programm:
- Liest alle Aufgaben ein
- Zeigt nur offene Aufgaben in der Konsole
- Fügt eine neue Aufgabe hinzu
- Sortiert die Aufgaben nach Datum
- Speichert die Datei
2️⃣ Beispielcode
Code:using System;
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
static void Main()
{
string filePath = @"C:\Temp\Aufgaben.xlsx";
var excelApp = new Excel.Application();
excelApp.Visible = false;
Excel.Workbook workbook;
if (System.IO.File.Exists(filePath))
{
workbook = excelApp.Workbooks.Open(filePath);
}
else
{
workbook = excelApp.Workbooks.Add();
Excel.Worksheet ws = (Excel.Worksheet)workbook.Sheets[1];
ws.Cells[1, 1].Value2 = "Aufgabe";
ws.Cells[1, 2].Value2 = "Datum";
ws.Cells[1, 3].Value2 = "Status";
workbook.SaveAs(filePath);
}
Excel.Worksheet sheet = (Excel.Worksheet)workbook.Sheets[1];
// Letzte genutzte Zeile
int lastRow = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row;
Console.WriteLine("Offene Aufgaben:");
for (int row = 2; row <= lastRow; row++)
{
string status = sheet.Cells[row, 3].Value2?.ToString() ?? "";
if (status != "Erledigt")
{
string task = sheet.Cells[row, 1].Value2?.ToString() ?? "";
string date = sheet.Cells[row, 2].Value2?.ToString() ?? "";
Console.WriteLine($"- {task} (Datum: {date})");
}
}
// Neue Aufgabe hinzufügen
sheet.Cells[lastRow + 1, 1].Value2 = "Neue COM Aufgabe";
sheet.Cells[lastRow + 1, 2].Value2 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
sheet.Cells[lastRow + 1, 3].Value2 = "Offen";
// Sortieren nach Datum (Spalte B)
Excel.Range sortRange = sheet.Range[sheet.Cells[2, 1], sheet.Cells[lastRow + 1, 3]];
sortRange.Sort(
Key1: sheet.Cells[2, 2],
Order1: Excel.XlSortOrder.xlAscending,
Header: Excel.XlYesNoGuess.xlNo
);
// Speichern und schließen
workbook.Save();
workbook.Close();
excelApp.Quit();
// COM-Objekte freigeben
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
Console.WriteLine("Neue Aufgabe hinzugefügt und Aufgaben sortiert!");
}
}
3️⃣ Erklärung
- Offene Aufgaben filtern → Status prüfen (
/Code:Offen
)Code:Erledigt
- Neue Aufgabe hinzufügen → mit aktuellem Timestamp
- Sortieren nach Datum → Range von Zeile 2 bis letzte Zeile
- COM-Objekte freigeben → Excel-Prozess wird korrekt beendet
- Konsole zeigt alle offenen Aufgaben
4️⃣ Vorteile COM Interop für so ein Beispiel
- Excel vollständig nutzbar → Formeln, Sortierung, Filter
- Visuell sofort überprüfbar, da Excel-Datei bearbeitet wird
- Perfekt für kleine Automatisierungs-Tools, die Excel als „Datenbank“ nutzen
Wenn du willst, kann ich als Nächstes noch ein komplettes Mini-Task-Manager-Framework in C# mit Excel COM Interop und GUI bauen, das automatisch Aufgaben anzeigt, abhaken lässt und live neue Aufgaben einfügt – ähnlich wie dein Perl/Python-Framework, aber komplett in C#.
Willst du, dass ich das erstelle?

