Benutzer mit den meisten Antworten
In C# ein Formelergebnis in Excel aus eine Zelle auslesen

Frage
-
Hallo zusammen,
ich muss ein Programm schreiben, dass einen Preis berechnet. Dabei sollen die Preise für die einzelnen Bauteile aus einer Exceltabelle bezogen werden. Das Problem ist, die Zellen in denen die Preise angegeben sind, sind Formeln. Und leider musste ich feststellen dass dies über die normale Art und Weise eine Zelle in C# auszulesen nicht möglich ist. Der Wert ist dann gleich null. Die Formel entfernen, und den Preis in die Zelle manuell eintragen ist auch nicht, das sind mehr als 1300 Zellen. Wenn jemand eine Lösung hat, nur her damit.
Danke im Voraus
- Bearbeitet Jabbschy Mittwoch, 17. Februar 2016 15:50
Antworten
-
Hallo Jabbschy,
auch wenn der Wert in einer Formel steht, kann man den Wert über die Eigenschaft "Value2" der Zelle auslesen.Wenn es bei Dir nicht klappt poste doch mal Deine Programmteile, mit dem Du die Zelle ausliest.
Hier mal ein kleines Beispiel von mir:
Excel.Range Zelle; Excel.Workbook wbXls; Excel.Worksheet wsXls; Excel.Application appXLS = new Excel.Application(); appXLS.Visible=true; wbXls = appXLS.Workbooks.Open(@"N:\Temp\Test.xlsx"); wsXls = wbXls.Worksheets[1]; Zelle = wsXls.Cells[1,1]; Debug.Print(Zelle.Value2);
In dem Exceldokument Test.xlsx steht bei mir in der Zelle A1 ein Formel, die ich mit obigem Codeschnippsel auslese.
Grüße
Roland
- Als Antwort markiert Jabbschy Donnerstag, 18. Februar 2016 07:08
Alle Antworten
-
Hallo Jabbschy,
auch wenn der Wert in einer Formel steht, kann man den Wert über die Eigenschaft "Value2" der Zelle auslesen.Wenn es bei Dir nicht klappt poste doch mal Deine Programmteile, mit dem Du die Zelle ausliest.
Hier mal ein kleines Beispiel von mir:
Excel.Range Zelle; Excel.Workbook wbXls; Excel.Worksheet wsXls; Excel.Application appXLS = new Excel.Application(); appXLS.Visible=true; wbXls = appXLS.Workbooks.Open(@"N:\Temp\Test.xlsx"); wsXls = wbXls.Worksheets[1]; Zelle = wsXls.Cells[1,1]; Debug.Print(Zelle.Value2);
In dem Exceldokument Test.xlsx steht bei mir in der Zelle A1 ein Formel, die ich mit obigem Codeschnippsel auslese.
Grüße
Roland
- Als Antwort markiert Jabbschy Donnerstag, 18. Februar 2016 07:08
-
Hallo Roland,
Danke für deine schnelle Antwort, aber das hat leider auch nicht funktioniert.
Mein Code lautet wie folgt:
Excel.Application preisapp = new Excel.Application(); Excel.Workbook preiswb = preisapp.Workbooks.Add(@"\Pfad\prc.xlsx"); Excel.Worksheet preisws = (Excel.Worksheet)preiswb.Worksheets[1]; MessageBox.Show(preisws.get_Range("H" + Convert.ToString(zeile)).Value2); labelPreis.Text = preis + " €";
Ich habe den Wert mal Testweise in einer Messagebox ausgeben lassen, damit ich beim Convert.ToDouble keine Fehlermeldung bekomme.
-
Hi,
ich bin bei dem Thema nicht ganz sicher, aber 'get_Range' gibt den Typ Object zurück. Dieser müsste sogar ein zweidimensionales Array sein.
Du kannst dir ja, wie der Name schon sagt, eine RANGE zurückgeben lassen; "deinWB.get_Range("A1","C10")
Ich würde aber generell, wie Roland schon schrieb, CELLS verwenden.- Bearbeitet Stefan Krömer Mittwoch, 17. Februar 2016 16:30
-
Ja, stimmt. Mit dem get_Range kann ich mir mehrere Werte geben lassen, es funktionirt aber auch mit einem gut. Aber habe den Fehler gefunden; Ich habe vergessen dass das Programm in der selben Datei aber in einer anderen Tabelle suchen soll. Weiß jemand wie man das macht?
-
Ja, das ist relativ einfach, anstelle von:
wsXls = wbXls.Worksheets[1];
schreibst Du:
wsXls = wbXls.Worksheets["NameDerTabelle"];
Achte darauf, dass der Name der Tabelle in Anführungsstrichen stehen muss.
Grüße
Roland