Zugriff auf Excel



  • Hallo,

    ich will von C++ aus auf eine Excel Datei zugreifen - diese Öffnen und anschließend ein darin enthaltenes Makro ausführen.

    Öffnen der Datei mache ich mit:

    ofstream of;
    of.open("..\\Makros\\MakeIt.xls", std::ios::in);
    

    danach schreibe ich etwas in ein paar Zellen, allerdings verliert er durch das Öffnen das Makro und der restliche Inhalt der Datei ist irgendwie kaputt, wobei am anfang das richtige steht was ich eingegeben habe.

    Wie muss ich das richtig machen, damit das Makro nicht verloren geht, ich allerdings trotzdem in ein paar Zellen etwas schreiben kann?

    Und wie kann ich anschließend ein Makro von C++ aufrufen (oder über ein Bat File) oder kann Excel das Makro auch automatisch starten?



  • fstream f;
    f.open("..\\Makros\\MakeIt.xls", std::ios::app);
    


  • Hallo

    du wirst kaum über den Dateistream in Exceldateien schreiben oder gar Makros ausführen können. Dazu müßtest du ja das komplette Excel-Format interpretieren, und das dürfte den Aufwand nicht wert sein.
    Es gebe noch die Möglichkeit, mit einem installiertem Excel über OLE-Server zu agieren, aber auch das ist aufwendig.

    Am einfachsten ist eigentlich statt C++ dafür VBA oder VB zu nehmen.

    bis bald
    akari



  • ok, aber verstehen tu ichs nicht ganz. Ich kann ja mit

    of << "Zelle1" << ";" << "Zelle2" << std::endl;
    

    in eine Datei schreiben, oder geht das nur auf *.csv Dateien?

    Das ios::app verändert mir zwar das Excel File nicht, dafür kann ich sonst auch nichts machen, das ist auch nicht das was ich will.

    Mir geht es um das, dass ich einen Ablauf automatisier und dazu müssen viele Sachen gemacht werden, was ünter VB wieder schwierig ist - noch dazu kann ich VB nicht wirklich.

    Bis jetzt ist es so, dass ich Daten über eine Gui eingebe und aus diesen dann batch Files erstelle, die csv Dateien generieren (Bilder, Statistiken), anschließend werden die csv Dateien mit Hilfe einer anderen xls Datei + Makro (die aber bestimmte Daten die C++ weiß benötigt)die csv Dateien bearbeitet und in xls abgespeichert.... naja irgendwie viel und konfus... und jetzt weiß ich gar nicht mehr wie ich das realisieren soll, wenn man auch kein Makro ausführen kann. 😞



  • Hallo

    in eine Datei schreiben, oder geht das nur auf *.csv Dateien?

    Genau. CSV-Dateien sind sozusagen lesbare Textdateien, XLS sind mehr oder weniger Binärdateien. Davon kannst du dich selber überzeugen. Öffne eine csv und eine xls Datei im einfachen Texteditor. Bei letztere kannst du zwar teilweise die Zellenwerten noch lesen, aber das reicht für einen Schreibzugriff nicht aus.
    Im Netz sind sicher Infos über das xsl-Format erhältich. Eventuell sogar libs für den Zugriff. Aber Makros wirst du damit auf keinen Fall ausführen können.

    Entweder reduzierst du die Verarbeitung ganz auf cvs, beschäftigst dich intensiv und aufwendig mit dem Dateiformat (setzt dabei alle Excel-Makros in c++ um), benutzt den schwierigen Excel-OLE-Server oder arbeitest dich doch in VBA/VB ein.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du kannst das via OLE-Automatisierung machen. In C++ kann man dazu InvHelper verwenden, damit ist Late-Binding einfacher.
    http://blog.kalmbachnet.de/files/InvHelp.zip

    Siehe:
    http://blog.kalmbachnet.de/?postid=63


  • Mod

    Hier ist eine komplet neutrale Klasse für so etwas, die das mit ODBC macht.
    http://www.codeproject.com/useritems/BasicExcel.asp


Anmelden zum Antworten