Excel automatisieren



  • Hi zusammen ich muss Daten aus einer MS-SQL-DB in ein Excel-sheet exportieren. Ich habe hierzu ein CDatabase Objekt abgeleitet und dann wie auf eine DB drauf zugegriffen. 🙂 👍
    Jetzt kommt das große aber! Ich soll nun Funktionen einfügen, sowas wie =min(..) oder =max(..) und so weiter. In numeric Felder kann ich das nicht schreiben weil es keine Zahlen sind und in eine Textspalte auch nicht weil er mir dann '=max(..) schreibt und excel das dann nicht als FKT sieht.
    Jetzt hab ich mir gedacht dass ich nicht um ein COM-Objekt drum rum komm. Da hab ich dann auch die nötigen editier-Möglichkeiten.
    Dazu hab ich mir mal das hier 1 angeschaut. Aber ich glaube so 2 ist es schöner, weil ich da wirklich vollen Umfang hab.
    Jetzt zu meiner Frage: Wie kann ich bei letzter Variante eine .xls Datei erstellen, ohne die View überhaupt sichtbar zu haben? Ich kann mich übers Menü zu ner konvertierung hangeln, die dann mein Objekt in ein xls konvertiert. Denn wenn ich es einfach als XLS speichere kann es excel nicht lesen. 😞
    Wie kann ich das also vollautomatisch machen? Hier mal das aus dem Link 2 oben beschriebene Beispiel als Beispielprojekt (läuft einwandfrei) [einfach mal Menü: Bearbeiten->neues Objekt einfügen und dann mal spielen]. Ich will also auf einen Button export clicken und dann macht er mir das Excelfile wie ich es haben möchte.

    Vielen Dank für jede Art von Hilfe schon mal im Voraus



  • HAT NICHTS MIT DER FRAGE ZU TUN!

    Aber für die die es interessiert, so geht die erst genannte Variante:

    CDatabase database;
    	CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)";	// exactly the same name as in the ODBC-Manager
    	CString sExcelFile = ""; 
        sExcelFile = "C:\\test.xls"; //das hier wird erstellt
    	CString sSql;
    	TRY
    	{
    	// Build the creation string for access without DSN
    
    	sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
    				sDriver, sExcelFile, sExcelFile);
    
    	// Create the database (i.e. Excel sheet)
    	if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
    	{
    		// Create table structure
    		sSql = "CREATE TABLE Exportiert (ID NUMBER, Auftragsnummer TEXT);
    	      database.ExecuteSQL(sSql);
    
    		MoveFirst();
    
    		while(!IsEOF())
    		{
    		sSql = "INSERT INTO Exportiert (ID, Auftragsnummer) VALUES (%d,\'%s\');
    			database.ExecuteSQL(sSql);			MoveNext();
    		}
    		MoveFirst();
    	}
    
    	// Close database
    	database.Close();
    	}
    	CATCH_ALL(e)
    	{
    		TRACE1("Driver not installed: %s",sDriver);
    	}
    	END_CATCH_ALL;
    }
    


  • da mir niemand bisher geholfen hat hab ich weiter gesucht und glaub ich das gefunden was ich gesucht hab. Das hier 3
    Ich spiel mal damit rum und wenn ich Fragen hab melde ich mich nochmal. 😉



  • So und schon bin ich wieder hier! 🙂
    Hab das Beispielprogramm gemacht und es ging einwandfrei. Jetzt wollte ich das ganze auf mein Projekt übertragen und da geht es natürlich nicht.

    if(!app.CreateDispatch("Excel.Application"))
             {
                AfxMessageBox("Couldn't start Excel.");
             }
    

    Diese Fehlermeldung kommt! Aber warum? Kann mir das einer erklären? In der anderen Anwendung geht es aber bei mir nicht! Wieso denn das?



  • Also bin ja schwer entäuscht von euch *gg* nein Quatsch aber ich hab es jetzt raus gefunden. Wenn man Beipiel 3 für ne SDI machen will sollte man das hier beachten. Also einfach noch vorne dran vor dem öffnen

    #include "excel9.h"
    
    // Ole initialization class.
    class OleInitClass {
    public:
    	  OleInitClass() {
    		 OleInitialize(NULL);
    	  }
    	  ~OleInitClass() {
    		  OleUninitialize();
    	  }
    };
    // This global class calls OleInitialize() at
    // application startup, and calls OleUninitialize()
    // at application exit.
    OleInitClass g_OleInitClass;
    

    😮
    Dann gehts


Anmelden zum Antworten