TStringGrid->Excel



  • Hallo zusammen!

    Ich arbeite mit dem Borland C++ Builder 6!
    Ich will Daten von einer Excel Datei in ein TStringGrid einlesen leider weiß ich nicht wie. Den Pfad wo die Excel Datei ist hab ich schon herausgefunden nur weiß ich leider nicht wie ich es einfügen soll.
    Würde mich über eine rasche antwort freuen

    Thx

    derf



  • XLS ist ein proprietäres, binäres Format, das kann mit Standardmitteln nicht ausgelesen werden.
    Wenn du stattdessen mit CSV arbeitest kannst du die Datei mithilfe von TStringList-Methoden und -Eigenschaften z.B. in ein StringGrid einlesen. Einen Einstieg dazu sollte der FAQ-Beitrag "StringGrid - komplett abspeichern/einlesen" liefern.



  • Morgen!

    hmmm aber es muss doch möglich sein dass ich über den ausgewählten pfad auf die xls datei zugreife und diese dann in eine clv datei umwandle?? oder lieg ich da falsch??



  • *edit*
    csv sry



  • Zum Umwandeln müsstest du das XLS-Format lesen können, da beisst sich der Schwanz in den Hund.
    Du musst die Datei schon in Excel (oder OpenOffice etc.) als CSV abspeichern.



  • hmm ich habe das problem dass ich aber in der csv datei nur eine bestimmte spalte auslesen will und nicht das ganze blatt... ausserdem ist wenn ich die excel datei in eine csv umwandle lauter wirrwar drinnen .. ka warum hab das noich nie gemacht ?!



  • Wenn Excel auf dem Rechner, auf dem das Programm laufen soll, installiert ist, dann kann man auch über Office Automation (OLE) die Zellen auslesen.



  • also excel is auf dem rechner installiert... könntest du mir das vlt ein bisschen näher erklären bzw einen link zu einem guide geben thx



  • derf schrieb:

    also excel is auf dem rechner installiert... könntest du mir das vlt ein bisschen näher erklären bzw einen link zu einem guide geben thx

    Vom Prinzip her funktioniert das so, daß man Excel öffnet und "fernsteuert".

    Die zwei Links aus der FAQ sollten dir helfen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39258.html
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39259.html



  • hat mir schon ein wenig weitergeholfen... aber ich verstehe den code nicht

    Variant Excel; 
         Excel = Variant::CreateObject("Excel.Application"); 
    
         Excel.OlePropertyGet("ActiveWorkBook"); 
         // Excel-Datei öffnen 
            Excel.OlePropertyGet("WorkBooks").OleFunction("Open","C:\\test.xls"); 
    
         // Sichbar machen 
         Excel.OlePropertySet("Visible",1); 
    
         Variant Sheet; 
         Sheet=Excel.OlePropertyGet("ActiveSheet"); 
         ShowMessage(Sheet.OlePropertyGet("Cells",1,1).OlePropertyGet("Value"));
    


  • was ist zb ActiveWorkBook.... ist das meine excel datei bzw WorkBooks und Avtive Sheet

    wenn mir da jemand helfen könbnte wäre ich sehr Dankbar



  • void __fastcall Tfrmmain::btnokClick(TObject *Sender)
    {
    
            if (pfad->Text!="")
            {
                    frmanzeige->Show();
                    frmmain->Visible=False;
                    frmanzeige->strtabelle->Cells[1][0] = "PosNr";
                    frmanzeige->strtabelle->Cells[2][0] = "StklNr";
                    frmanzeige->strtabelle->Cells[3][0] = "ZngNr";
    
                    Variant Excel;
                    Excel = Variant::CreateObject("Excel.Application");
    
                    Excel.OlePropertyGet("ActiveWorkBook");
                    // Excel-Datei öffnen
                    Excel.OlePropertyGet("WorkBooks").OleFunction("Open","\""+pfad->Text+"\"");
    
                    // Sichbar machen
                    Excel.OlePropertySet("Visible",1);
    
                    Variant Sheet;
                    Sheet=Excel.OlePropertyGet("ActiveSheet");
                    ShowMessage(Sheet.OlePropertyGet("Cells",1,1).OlePropertyGet("Value"));
            }
    
            else
            {
                    Application->MessageBox("Bitte Datei auswählen", "Auswahl",MB_OK | MB_ICONINFORMATION);
            }
    
    }
    

    hab das jetzt mal so probiert aber Funktioniert noch immer nicht wie es soll. Ich kann es zwar kompilieren, aber danach kommt ein Fehler dass die Parameter bei der OleFunction nicht stimmen ... kann mir da vlt einer weiterhelfen ???
    Danke



  • Hier der Code macht was du möchtest und ist ein wenig übersichtlicher, da einzelne Aktionen aufgedröselt sind.

    Um das richtig zu verstehen muss man sich mit dem Objektmodell von Excel auseinandersetzen.

    Variant vExcel, vWorkBooks, vWorkSheets, vWorkSheet;
    
    vExcel = CreateOleObject("Excel.Application");
    
    vWorkBooks = vExcel.OlePropertyGet("WorkBooks");
    vWorkBooks.OleFunction("Open","c:\\test.xls");
    
    vWorkSheets = vExcel.OlePropertyGet("Worksheets");
    vWorkSheet = vWorkSheets.OlePropertyGet("Item", 1); //Aufs erste Sheet stellen
    
    ShowMessage(vWorkSheet.OlePropertyGet("Cells",1,1).OlePropertyGet("Value"));
    


  • Morgen!

    ja das öffnen einer excel datei is eh gegangen nur wie wähle ich zb. die 3 spalte aus und leg die dann in die erste spalte meines StringGrid.
    Im endeffekt will ich die einzelnen Zeilen dann mit einer Access datenbank vergleichen!

    Kann mir da jemdand einen lösungscorschlag geben THX


Log in to reply