Excel - Daten nach Excel exportieren



  • Hallo, ich hatte schon mal gefragt, aber keine richtige Antwort bekommen.

    Wie kann ich Daten aus einer DBGrid oder einer SQL-Query nach Excel transportieren, so dass jedes Datenfeld einer Spalte in Excel entspricht?

    Danke und hoffentlich weiß das einer.

    [ 17.08.2001: Beitrag editiert von: Jansen ]



  • Du könntest über Automation, Excel starten ein neues Dokument hinzufügen und dann die Felder übertragen. Dafür mußt du aber Excel installiert haben, sonst kommst du an die Automatisierungs-Objekte nicht ran.

    ------------------
    Happy Building
    wünscht
    Happy Builder
    Ein Besuch der sich lohnt: http://www.bcbarena.de



  • Excel ist installiert, aber mit welchen Befehlen übertrage ich. Ich finde nix in der Hilfe oder im Internet!?



  • Hallo
    so habe ich es gemacht.

    // Excel oeffnen
    if ( !m_ExcelApp )
    {
      m_ExcelApp = CoApplication_::Create();
      m_ExcelApp->Workbooks->Add (BATWorksheet);
    }
    
    // Daten eintragen
    m_WorkSheet->Cells->set__Default (5,1,"Daten");
    
    // Excel schliessen
    if ( m_ExcelApp )
    {
      m_ExcelApp->set_DisplayAlerts ( 0, false );
      m_ExcelApp->Quit ();
    }
    

    Wenn du damit nicht zurechts kommst schick mir ein Mail fuer weitere Daten
    info@BoehmSoft.de

    MfG
    Klaus

    [ 09.07.2001: Beitrag editiert von: Happy Builder ]



  • Klaus hat es über die frühe Bindung gemacht. Wenn du es darüber versuchtst, mußt die die TypeLibary von Excel einbinden, oder die Serverkomponenten dei Borland in der Version 5 mitliefert.

    Ich habe noch einen zweiten Weg über die späte Bindung (während der Laufzeit). Hier mußt du keine TypeLibary einbinden.

    Hier ist der Code:

    #include <ComObj.hpp> // include-Reihenfolge beachten
    #include <utilcls.h>
    
    void __fastcall TMainForm::Query1AfterOpen(TDataSet *DataSet)
    {
        lblCount2->Caption = "Query Count = " + IntToStr(Query1->RecordCount);
        SaveToExcel(Query1);
    }
    
    void __fastcall TMainForm::SaveToExcel(TQuery *pQuery)
    {
        Variant Excel;
    
        try
        {
          Excel = GetActiveOleObject("Excel.Application");
        }
        catch(...)
        {
          Excel = CreateOleObject("Excel.Application");
        }
    
        //Excel.OlePropertySet("Visible", true);
    
        try
        {
            Variant WorkBooks = Excel.OlePropertyGet("WorkBooks");
            WorkBooks.OleFunction("Add");
    
            Variant ActiveWorkBook = Excel.OlePropertyGet("ActiveWorkbook");
    
            Variant WorkSheets = Excel.OlePropertyGet("Worksheets");
    
            Variant WorkSheet = WorkSheets.OlePropertyGet("Item", 1);
            WorkSheet.OleFunction("Activate");
    
            pQuery->First();
            for (int iRow=0; iRow < pQuery->RecordCount; iRow++)
            {
                for (int iCol = 0; iCol < pQuery->Fields->Count; iCol++)
                {
                    Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte
                    Range.OlePropertySet("Value", pQuery->Fields->Fields[iCol]->AsString);
                }
                pQuery->Next();
            }
    
            ActiveWorkBook.OleFunction("SaveAs", "D:\\Temp\\QueryResult.xls");
        }
        catch(...)
        {
    
        }
    
        Excel.OleFunction("Quit");
    
        Excel = Unassigned;
    }
    

    P.S.
    Das Beispiel dürfte eine Permiere im Internet sein. Ich habe noch kein Beispielprogramm für den C++ Builder gefunden der die späte Bindung ausführlich aufzeigt.

    [ Dieser Beitrag wurde am 13.05.2002 um 18:52 Uhr von Jansen editiert. ]


Anmelden zum Antworten