Laden...

C# GUI in Verbindung mit MS Excel

Erstellt von Ordu52 vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.101 Views
O
Ordu52 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren
C# GUI in Verbindung mit MS Excel

Guten Morgen zusammen,
ich habe eine Frage bezüglich Windows-Forms-Anwendungen in Verbindung mit MS Excel in C#.

Ich lese mit C# eine vorhandene Excel Datei aus und möchte nach einer Abfrage in die Excel Tabelle Werte reinschreiben.

Das Reinschreiben von Werten in Zellen funktioniert schon, wenn ich den Spaltenname manuell eingebe zum Beispiel (i, 5). I ist dann der Wert der in der Schleife immer hochgezählt wird.

Meine Frage wäre, ob und wie es möglich ist, dass ich in C# den Index der letztem befüllten Spalte auslesen kann, damit ich automatisiert die Werte in die letzte Spalte +1 eintragen kann.

Vielen Dank im Voraus

1
124 Beiträge seit 2012
vor 5 Jahren

Hallo,

du kannst ja einfach beim beschreiben der Tabelle die letzte beschriebene Zelle in einer Variable speichern. (Wenn das nicht das ist, was du meinst, dann wäre ein Stück Code nicht schlecht.)

Gruß Thomas

O
Ordu52 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hallo Thomas,

vielen Dank für die schnelle Antwort.

Ich glaube, ich habe eine Information vergessen.
Die Tabelle ist beim Öffnen bereits befüllt.
zum Beispiel ist bis Spalte E mit Inhalt befüllt.
Ich möchte jetzt erreichen, dass ich den Index der Spalte E (in diesem Fall auslese) und + 1 mache, damit ich den Index für die Spalte F habe.

4.931 Beiträge seit 2008
vor 5 Jahren

Mit welcher Technologie greifst du denn auf Excel zu (OLE, Office COM Interop, ...)?

Daher paßt dieser Beitrag wohl eher ins Unterforum "Datentechnologien" oder "Office-Technologien".

O
Ordu52 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hallo Th69,
ich greife mit Office.Interop

O
Ordu52 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hallo vielen Dank für die hilfreichen Antworten.
Das Problem konnte ich lösen. Das Ergebnis poste ich anschließend noch rein.

Allerdings hätte ich noch eine Frage bzw. ein Problem.
Ich habe folgende Schleife.

while (objCell.Value != null)
            {
                if (objCellIf.Value != null)
                {
                    objCellIf = objWorksheet.Cells[i, 10];
                    objCellIf.Formula = "=A" + i;
                }
                else
                {
                    objCellIf = objWorksheet.Cells[i, 10];
                    objCellIf.Formula = "=RUNDEN(A" + i + "+(A" + i + "*B" + i + "/100);2)";
                }
                i++;
                objCell = objWorksheet.Cells[i, 1];
                objCellIf = objWorksheet.Cells[i, 6];
            }

Diese Schleife überprüft, ob der Zellwert ungleich null ist, wenn ja geht er in die If-Bedingung. Die If-Bedingung überprüft ob die nächste Zelle leer ist, wenn ja führt er ein Statement aus, wenn nicht dann führt er ein anderen Statement aus.

Jetzt ist allerdings mein Problem, dass er irgendwie die else Bedingung nicht ausführt, bzw. das Programm bricht mit der FM System.Runtime.InteropServices.COMException: "Ausnahme von HRESULT: 0x800A03EC" ab.

Kann mir jemand helfen?

16.806 Beiträge seit 2008
vor 5 Jahren

Was sagt der Debugger? Was sagen die Ergebnisse bei der Google Suche nach der FehlerID?
[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Wozu überhaupt die Schleife?

O
Ordu52 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren

Hallo vielen Dank für die Antwort.
also ich habe in der folgenden Zeile ein Problem

objCellIf.Formula = "'=RUNDEN(A" + i + "+(A" + i + "*B" + i + "/100);2)";

Wenn ich " '= mache, bekomme ich keine Fehleremeldung, aber Excel rechnet es mir nicht automatisch aus. Erst wenn ich das einfach Anführungszeichen manuell lösche, wird es berechnet.

In der oberen Zeile

objCellIf.Formula = "=E" + i;

funktioniert es allerdings ohne Probleme. Da habe ich auch den einfach Anführungszeichen nach dem doppelten Anführungszeichen drinn.
In der Zelle steht dann auch '=E5, aber es wird automatisch berechnet.

5.657 Beiträge seit 2006
vor 5 Jahren

Hi Ordu52,

ich sehe keinen Zusammenhang zu deinem Problem im ersten Post und zu dem Code bzw. der Fehlermeldung aus deinem letzten Post. Woher kommt denn das einfache Anführungszeichen? Was willst du damit bewirken? In welchem Fall gibt es den o.g. Fehler? Es gibt doch genügend Beispiele im Netz, wie man mit Excel-Interop arbeitet, hast du dir mal ein paar Beispiele angeschaut?

Weeks of programming can save you hours of planning

O
Ordu52 Themenstarter:in
17 Beiträge seit 2018
vor 5 Jahren
            // ---------- Excel-Arbeitsmappe öffnen ----------
            Excel.Application objExcel = new Excel.Application();
            objExcel.Visible = true;
            Excel.Workbook objWorkbook = objExcel.Workbooks.Open("Pfad");
            Excel.Worksheet objWorksheet = objWorkbook.Worksheets["Tabelle1"];
            Excel.Range objCell;
            Excel.Range objCellIf;
            
            // ---------- Letzte befüllte Spalte ermitteln ----------
            int intLetzteSpalte = objWorksheet.UsedRange.Cells.Columns.Count;
            intLetzteSpalte++;

            // ---------- strFormel - Wert in Zellen schreiben ----------
            int i = 2;
            objWorksheet.Cells[1, intLetzteSpalte] = "ns1:Bruttobetrag";
            objCell = objWorksheet.Cells[i, 1];
            objCellIf = objWorksheet.Cells[i, 6];

            while (objCell.Value != null)
            {
                if (objCellIf.Value != null)
                {
                    objCellIf = objWorksheet.Cells[i, intLetzteSpalte];
                    objCellIf.Formula = "=A" + i;
                }
                else
                {
                    objCellIf = objWorksheet.Cells[i, intLetzteSpalte];
                    objCellIf.Formula = "'=RUNDEN(A" + i + "+(A" + i + "*B" + i + "/100);2)";
                }
                i++;
                objCell = objWorksheet.Cells[i, 1];
                objCellIf = objWorksheet.Cells[i, 6];
            }
            
            // ---------- Excel-Arbeitsmappe speichern & schließen
            objExcel.DisplayAlerts = false;
            objWorkbook.SaveAs("Pfad", CreateBackup: false);
            objExcel.DisplayAlerts = true;
            objWorkbook.Close();
            objExcel.Quit();
            MessageBox.Show("Vorgang erfolgreich durchgeführt.");

Hallo das ist mein kompletter Code.
Also ich habe zwei Spalten.
Erste Spalte A: Betrag
Zweite Spalte B: MwSt.

Die While Schleife geht die Spalte B durch und schaut, ob in der Zelle ein Wert ist, wenn nicht, dann schreibt er in die neue Spalte zum Beispiel D nur den Betrag.
Falls ein Wert steht, rechnet er die Mwst. auf den Betrag drauf und rundet auf zwei Nachkommastellen und dann schreibt er den Wert in Spalte D rein.

Ich hoffe, ich konnte mich diesmal ausdrücken und konnte mein Problem schildern.

Wie gesagt, ich habe nur ein Problem mit der Zeile, wo ich die Formel übergebe.