none
In C# ein Formelergebnis in Excel aus eine Zelle auslesen RRS feed

  • 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
    Mittwoch, 17. Februar 2016 15:47

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
    Mittwoch, 17. Februar 2016 15:52

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
    Mittwoch, 17. Februar 2016 15:52
  • 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.

    Mittwoch, 17. Februar 2016 16:08
  • 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.
    Mittwoch, 17. Februar 2016 16:29
  • 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?
    Mittwoch, 17. Februar 2016 17:25
  • 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

    • Als Antwort markiert Jabbschy Donnerstag, 18. Februar 2016 07:07
    • Tag als Antwort aufgehoben Jabbschy Montag, 22. Februar 2016 13:24
    Mittwoch, 17. Februar 2016 21:01
  • Funktionert alles. Auch mit der Formel. Vielen Dank
    Donnerstag, 18. Februar 2016 07:06