Variablen aus C++ Programm in Excel-Zellen übertragen



  • Hallo liebe Community,

    ich stehe vor folgendem Problem:

    Ich habe ein Programm, welches mir als Ergebnis einige Variablen mit dazugehörigen Werten liefert.
    Sieht folgendermaßen aus:

    SPF1 = 0.175
    SPF2 = 0.435
    SPF3 = 0.012
    SPF4 = 0.750
    .
    .
    .
    .

    natürlich steht im Programm nur die Variable, die eben den zugehörigen Wert hat.
    Ich würde nun gerne diese Werte in eine Excel Tabelle übertragen, so dass in Spalte A und Zeile 1 --> SPF1 steht und in Spalte B Zeile 1 der zugehörige Zahlenwert, dann in Spalte A und Zeile 2 --> SPF2 und in Spalte B Zeile 2 der zugehörige Zahlenwert usw.

    Ich habe schon einige Threads durch und bin auch schon auf Sachen wie http://www.willemer.de/informatik/cpp/fileop.htm oder http://www.a-m-i.de/tips/ ....... tion.php#cppexample_Excel gestoßen.
    Allerdings bin ich eigentlich Programmier-Anfänger und verstehe nicht wirklich, wo ich was anpassen muss. Außerdem steht bei einem der beiden Links auch nur, wie man die Werte in C++ einliest und nicht wie man sie in ein Excel-File schreibt.

    Eventuel kann mir jemand mit einem Beispiel-Code (am besten mit meinen SPF1 = 0.175, SPF2 = 0.435, usw.) oder so helfen.

    Schon einmal vielen Dank im voraus.

    Lg Kaiza



  • Am einfachsten ist wohl wenn du deine Daten in eine CSV (Comma-separated values) Datei schreibst und diese dann in Excel importierst. Das kann dann so aussehen:

    #include <fstream>
    using namespace std;
    
    int main()
    {
      double SPF1 = 0.175;
      double SPF2 = 0.435;
    
      ofstream file("test.csv");
      file << "SPF1;" << SPF1 << endl;
      file << "SPF2;" << SPF2 << endl;
    }
    

    Bzw. abhängig von der Anzahl deiner Variablen sollte man lieber ein Array/std::vector nehmen...



  • Erstmal Danke für die schnelle Antwort!

    Wird SPF1 automatisch in Spalte A und Zeile 1 geschrieben während der Zahlenwert in Spalte B und Zeile 1 geschrieben wird? Oder muss man da noch etwas beachten?

    Wie würde eine Array mit diesen Werten aussehen bzw. dieser Vektor?

    (bin leider wirklich Programmieranfänger, habe schon damit zu kämpfen gehabt, Werte aus einer MS Acess Datenbank auszulesen...)

    Mfg Kaiza


  • Mod

    Kaiza25 schrieb:

    (bin leider wirklich Programmieranfänger, habe schon damit zu kämpfen gehabt, Werte aus einer MS Acess Datenbank auszulesen...)

    Falls dein Programm letztlich dazu dienen soll, Daten aus einer Access Datenbank nach Excel zu übertragen, solltest du besser direkt danach fragen.



  • Nein, dass hätte ich sonst gesagt, mit C++ werden Tabellen ausgelesen, durch diverse if-Abfragen und Rechenoperationen dann mathematisch miteinander verbunden sprich Berechnungen gemacht und die Ergebnisse sollen zur weiteren Verwendung ausgegeben werden.

    Lg Kaiza



  • Habe jetzt ein wenig herumexperimentiert und dabei sind noch 2 weitere Fragen aufgekommen:

    Wie kann man statt dem Punkt (0.175) die Zahl mit einem Komma (0,175) exportieren?

    Wie kann man mehrere Zahlenwerte hintereinander darstellen?
    Ich möchte bei der Ausgabe von SPF1 = 0.175 dahinter noch die beiden vorherigen Zahlenwerte auch anzeigen sprich:

    Spalte A | Spalte B | Spalte C | Spalte D|
    _________________________________

    SPF1 | 0.175 | 0.1 | 0.075|

    Kann mir da vielleicht bitte jemand einen Beispielcode für diesen Fall zeigen, damit ich das ganze besser verstehen kann.

    Danke schon mal im voraus!

    Lg Kaiza


  • Mod

    Kaiza25 schrieb:

    Nein, dass hätte ich sonst gesagt, mit C++ werden Tabellen ausgelesen, durch diverse if-Abfragen und Rechenoperationen dann mathematisch miteinander verbunden sprich Berechnungen gemacht und die Ergebnisse sollen zur weiteren Verwendung ausgegeben werden.

    Also kurz: Kalkulieren mit Tabellen? Wäre das nicht viel einfacher mit einer Sprache oder Programm, das für solche Aufgaben gemacht wurde? Zum Beispiel - ein ganz wilder Vorschlag - einem Tabellenkalkulationsprogramm?

    Nicht dass ich von C++ abraten würde; aber du sprichst ja offensichtlich derzeit noch kein C++, und es kommt mir komisch vor, C++ lernen zu wollen für eine Problemstellung, die in anderen Sprachen wesentlich einfacher zu lösen wäre. C++ ist eine ganz allgemeine Programmiersprache, mit der man alles machen kann, aber im Gegenzug muss man auch fast alles von Grund auf selber konstruieren. Rechnen mit Tabellen geht halt wesentlich einfacher, wenn man beispielsweise nicht erst selber modellieren muss, was überhaupt eine Tabelle ist, sondern auf fertige Funktionalität zurückgreifen kann.



  • Also, damit es jetzt keine Verständigungsprobleme usw. gibt.

    Die Aufgabe besteht darin, aus 20 Eingabeparamtern einen einzigen Wert zu errechnen (über ziemlich viele Zwischenwerte, ca. 140)
    Das Ergebnis der Berechnung gibt das Sicherheitsrisiko einer Konstruktion an. Die stellt sich aus, einer Analyse der Häufigkeit auftretender Ereignisse und dem Schadensausmaß der Ereignisse zusammen.

    Warum jetzt C++, ganz einfach, weil ich nur von dieser Programmiersprache ein wenig Ahnung habe und mit Excel-Vorlagen usw. das ganze nur bedingt automatisiert wird.

    Knackpunkt war die Auswertung von 40 Tabellen, welche als MS Access Datei vorliegen und immer wieder von dem Institut, welches das Schadensausmaß von Ereignissen analysiert, aktualisiert werden. Deswegen konnte ich die Werte nicht einfach in den Programmcode übernehmen.

    Derzeit macht mein Programm folgendes:

    Über das Konsolenfenster gebe ich meine Eingabewerte nach der Reihe ein. Danach wird die Häufigkeitsanalyse durch mathematische Operationen durchgeführt. Mittels if-Abfragen, werden bestimmte Rechenwege eingeschlagen, welche von den Eingabewerten bestimmt werden. Auch die Auswahl der Tabellen, sowie die einzelnen Werte der Tabellen sind von den Eingabewerten abhängig. Mittels SQL hab ich es auch hinbekommen, dass ich immer in Abhängigkeit der Eingabewerte auch die richtigen Tabellenwerte erhalte.

    Diese werden dann noch miteinander multipliziert und fertig. Am Ende habe ich einen Wert als Ergebnis und ein paar hundert Häufigkeitswerte und Schadensausmaßwerte. Diese Ergebnisse sind aber für die Nachvollziehbarkeit wichtig und müssen dementsprechend auch ausgegeben werden, wo wir nun bei meinem Problem angekommen wären.

    Ausgabe aller Werte in eine Excel-Datei...

    Hoffentlich, ist meine Problematik jetzt nachvollziehbar.

    Lg Kaiza


  • Mod

    Ok, verstehe.

    Dann ist doch die Frage, die sich aufdrängt, wie du deine Werte im Programm gespeichert hast. Ich nehme doch mal stark an, dass du deine hundert Häufigkeitswerte nicht wirklich in einzelnen Variablen

    double SPF1, SPF2, ... SPF99, SPF100;
    

    gespeichert hast, sondern irgendwie als vector, array oder sonstige Datenstruktur.

    Allgemein kann man auch weitgehend unabhängig vom unterliegenden Container einfach eine Ausgabeschleife der Art

    for(auto value : data)  // wobei data der Container mit deinen Daten sein soll
      cout <<< value << '\n';
    

    machen. Die genaue Formatierung muss dabei natürlich noch auf deine Bedürfnisse angepasst werden.



  • Leider habe ich aber genau das gemacht...

    Ein kleines Beispiel:

    Alle Häufigkeitsereignisse vom Brandfall haben die deklaration B1-B20 (ist vorgegeben) diese sind mit den vorherigen Häufigkeitsereignissen verknüpft welche alle die Bezeichnung A1-A20 haben.

    Die sind miteinander verkettet, also um weiter zu rechnen werden diese erst multipliziert was AB1-AB20 ergibt.

    Dazu kommen dann zur Häuigkeit B1-B20 das zugehörige Schadensereignis... Also PF1-PF20, welche wiederum multipliziert wird. Erst dannach habe ich SPF1-SPF20 als Ergebnis, wobei die ganze Reihe dann für den Sicherheitswert addiert wird. Da aber Beispielsweise SPF5 nicht für den Sicherheitswert gebraucht wird, fällt dieser raus.

    Da ich von meinem Wissensstand aus, keine Ahnung hatte, wie ich das ansonsten lösen könnte, habe ich jetzt für jeden Wert und Zwischenwert usw. eine eigene Variable. Ich habe auch keine Ahnung, wie man bei so einem Datenvektor, Array oder Datenstruktur, unterschiedliche Werte in die Berechnung mitnimmt und so Werte wie SPF5 zwar ausgibt, aber nicht mitrechnet.

    Schön langsam merke ich, dass die Ausgabe in ein Excel File nicht mein einziges Problem ist...

    Lg Kaiza


  • Mod

    Ja, du solltest mal ganz dringend ein Grundlagenlehrbuch der Programmierung lesen. Das alles ginge viel einfacher.

    Aber, da du ja anscheinend kein Problem damit hattest, hunderte oder gar tausende von Zeilen Code zu schreiben, um jeder deiner Variablen in mühsamer Handarbeit einzeln ihren Wert zuzuweisen, sehe ich gerade nicht dein Problem, weitere hunderte oder gar tausende Codezeilen zu schreiben, um jede deiner Variablen in mühsamer Handarbeit einzeln auszugeben. Wo genau liegt das Problem?



  • Also derzeit liegt es daran, dass ich bei den ausgegebenen Zahlen einen . habe, also 0.175 allerdings bräuchte ich die Zahlen mit einem Komma also 0,175.

    Desweiteren würde ich gerne mehrere Zahlenwerte auch nebeneinander ausgeben.

    Zum Thema Grundlagenbuch, das habe ich mir schon bestellt. Wichtig ist für mich, dass die Berechnung zumindest erstmal funktioniert, sowie durch die Hilfe der Community, die Werte nun auch in einer Excel-Datei stehen. Für die Vereinfachung des Codes kann ich mir dann Zeit lassen

    Was noch ein Punkt wäre, kann man beispielsweise die ersten 100 Werte in die Arbeitsmappe 1 schreiben, dann eine neue Arbeitsmappe über das C++ Programm erstellen und dort hinein dann weitere Werte schreiben?

    Vielen dank für die Hilfe!

    Lg Kaiza



  • Einfach nachdem die Daten in die csv ausgegeben wurden, gehst du mit notepad rein und suchst jeden Punkt und tippst da ein Komma hin. Erledigt! Oder du benutzt eben ein string find/replace, aber wer braucht schon sowas...



  • TGGC schrieb:

    Einfach nachdem die Daten in die csv ausgegeben wurden, gehst du mit notepad rein und suchst jeden Punkt und tippst da ein Komma hin. Erledigt! Oder du benutzt eben ein string find/replace, aber wer braucht schon sowas...

    Wo sind wir denn? Warum nicht direkt bei der Ausgabe schon Komma ausgeben? Das geht z.B. so:

    locale loc("de-DE"); // Locale für deutsch
    
    ofstream file("test.csv");
    file.imbue(loc);  // Locale vor der ersten Ausgabe setzen
    

    Mehrere Zahlenwerte nebeneinander geht indem man diese mit einem Semikolon abtrennt. Aufteilung auf mehrere Arbeitsmappen wüsste ich nicht wie man das mit CSV Dateien hinkriegt.



  • @ sebi707

    Habs jetzt ausprobiert und er ersetzt alle Punkte durch ein Komma. Vielen Dank für die Hilfe dafür!

    Okay, also bei CSV Dateien geht das mit der Arbeitsmappe nicht...

    Vielleicht weiß ja wer eine Lösung wie ich das ansonsten noch einfach hinbekomme.

    Danke schon mal im voraus.

    Lg Kaiza



  • Warum machst du das Ganze nicht mit VBA? Da hast du vollen Zugriff auf Excel und kannst mit deinen Arbeitsmappen machen was du willst. Klar ist das etwas langsam.
    Eine Alternative wäre ein Excel-Zugriff über OLE. Da brauchst du aber erstmal ein Lib die dir das abnimmt.
    Hier ist mal ein Beispiel für OLE Zugriff mit C++
    http://www.codeproject.com/Articles/34998/MS-Office-OLE-Automation-Using-C


Log in to reply