Daten aus MS Excel-Tabelle auslesen??
-
Hallo,
kann mir jemand sagen ob ich während der Laufzeit eines Programms Daten aus einer Excel-Tabelle auslesen kann um diese im Programm ( z. Bsp. für Berechnungen) zu verwenden....
Wenn mir jemand helfen kann, bitte sagt mir wie das genau funktioniert..
Finde leider selbst keine LösungMfG
PS: irgendwie komme ich mit der Gleitkommaformatierung nicht zurecht.
Kann mir jemand ein Codebeispiel geben wie ich ein Float auf 4 Nachkommastellen begrenzen kann?? (z. Bsp.: FloatToStrF)
Bin wahrscheinlich zu blöd dafür.... :-o
-
In der Version 5 des C++Builders sind die OLE-Automatisierungsschnittstellen gleich als Komponenten in die Komponentenpalette installiert. Auf diese Weise ist der Zugriff aus C++Builder-Programmen auf Office-Applikationen einfach geworden. Für Excel gibt es verschiedene Komponenten. Als Dreh- und Angelpunkt fungiert ExcelApplication.
zu 2.
sollte mit
myLabel->Caption=FormatFloat("0.00",zahl)
funktionieren
-
hallo Warlord,
zu 2. thx, hat funktioniert!
zu 1. kann ich mir leider nichts unter deiner Erklärung vorstellen. Hab zwar in der Komponentenpalette unter Servers die Excel-Zugriffsmöglichkeiten gefunden, aber in der Hilfe zum BCB5 leider nichts über die Verwendung entdeckt. Kannst du mir vielleicht mal des ganze per Code-Bsp. näher bringen??
MfG
Manuel
-
Den FAQ-Abschnitt "Excel" kennst du?
Und in Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!
-
Hallo Jansen,
danke für den Link. Hab zwar in den FAQ's danach gesucht, bin aber nie direkt darauf gekommen oder hab es übersehen.
Zu dem mit den Threads: Kommt nicht mehr vor!
MfG
Manuel
-
Hallo nochmal zum selben Thema:
Hab mir die FAQ durchgelesen und versucht, das ganze auf mein Problem anzuwenden, nur leider komm ich nicht drauf, wie ich eine bestimmte Zelle in der ExcelTabelle ansprechen kann, bzw. den darin enthaltennen Wert einer Variablen in meinem Proggi zuzuweisen
Dazu müsste ich doch die Tabelle garnicht sichtbar machen?????
MfG
-
Hi,
http://www.c-plusplus.net/forum/viewtopic.php?p=284120#284120
ist sogar mit Beispiel.
Ich hab da heut noch eben schnell ein Fehler beseitigt.
void __fastcall TMLWorkbook::UpdateSheetList() { FSheetNames->Clear(); if(Connect) { if(!(WorksheetCount ==FSheetNames->Count || WorksheetCount ==FWorksheets->Count )) { FSheetNames->Clear(); for( int i=FWorksheets->Count-1;i>=0;i--) { TMLWorksheet* sheet= reinterpret_cast <TMLWorksheet*>( FWorksheets->Items[i]); if(sheet) delete sheet; } FWorksheets->Clear(); if(WorksheetCount>0) { for( int i=1;i<=WorksheetCount;i++) { TMLWorksheet * book=new TMLWorksheet(this,(Variant)var_Book.OlePropertyGet("WorkSheets",i)); FWorksheets->Add((void*)book); FSheetNames->Add(var_Book.OlePropertyGet("Worksheets",i).OlePropertyGet("Name")); } } // ShowMessage(FSheetNames->Text); } } }
das selbe in UpdateBookList(). Ich hatte doch glatt vergessen, den Speicher wieder freizugeben *rolleyes*
naja, ist ja eh jedem aufgefallen und die meisten werden das ja eh sofort korrigiert habenDieses Update-Verfahren der Listen ist ein wenig schrumpelig. Ich wollt das immer schon mal umschreiben. Aber die Zeit....
-
Hallo Andreas,
genau auf diese Beiträge von chrisfs und dir in den FAQ's hab ich mich bezogen. Prinzipiell ist mir die Vorgehensweise von chrisfs bewusst, bzw. ich
kann den Code lesen und verstehen, aber mein Problem ist, wie ich eine Zelle in einer Tabelle direkt ansprechen und ihren Wert auslesen kann. Dieser soll automatisch an eine Variable (Float) übergeben und dann in einer Berechnung verwendet werden. Diese Befehlsfolge kann ich in dem Bsp. nicht erkennen bzw. nachvollziehen...MfG
Manuel
-
Hi,
TMLExcel* Excel =new TMLExcel; Excel->Visible=true; Excel->OpenWorkbook("C:\\test.xls"); // irgend eine Arbeitsmappe Excel->Books[0]->Sheets[0]->CellString[0][0]="Hallo"; // Die Zelle A1 in der ersten Tabelle der ersten Arbeitmappe setzen ShowMessage(Excel->Books[0]->Sheets[0]->CellString[0][0]); // Die Zelle A1 in der ersten Tabelle der ersten Arbeitmappe auslesen
das setzt natürlich die Klasse aus der FAQ voraus.
Dabei werden die Getter und Setter- Methoden der Klasse verwendet.Die sehen ja wie in der FAQ steht so aus:
//---------------------------------------------------------------------------- String __fastcall TMLWorksheet::GetCellString(int Col, int Row) { return var_Sheet.OlePropertyGet("Cells",Col+1,Row+1).OlePropertyGet("Value"); } //---------------------------------------------------------------------------- void __fastcall TMLWorksheet::SetCellString(int Col, int Row, String Text) { var_Sheet.OlePropertyGet("Cells",Col+1,Row+1).OlePropertySet("Value",Text.c_str()); } //---------------------------------------------------------------------------
das nach den eigenen Bedürfnissen nachzuprogrammieren sollte kein Problem sein. Ansonsten nimm einfach die Klasse aus der FAQ