Excel - Beispiel und Wrapperklasse für Excelautomation
-
Hallo,
da ich jetzt Wochen nach der Lösung gesucht habe, mir aber keiner helfen konnte, ist es bestimmt interessant, wenn ich den Code hier einfüge: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"));
Damit könnt ihr eine Excel-Datei öffnen und einen beliebigen Zellenwert auslesen.
Christian
-
Hi,
[Edit:] Beitrag neu aufgesetzt
man kann, wie mein Vorgänger schon beschrieben hat und wie es auch in Happy's Beitrag in der FAQ steht über Variant- Typen auf Excel zugreifen.
Variant stellt verschiedene Methoden zur Verfügung, die Daten aus dem Variant-Objekt holen oder schreiben. Auch können Funktionen von Excel ausgeführt werden.
Die Methoden OlePropertyGet und OlePropertySet werden benutzt um Eigenschaften von Excel zu setzten.
Beispiel:
Variant var_Excel=CreateOleObject("Excel.Application"); // Eigenschaft auslesen: bool Visible=var_Excel.OlePropertyGet("Visible"); // Eigenschaften setzen: var_Excel.OlePropertySet("Visible",false);// unsichtbar machen
Funktion können ähnlich benutzt werden:
var_Excel.OleFunction("Quit");
"Quit" ist eine Funktion von Excel, die hier aufgerufen wird.
Jede Excel- Instanz enthält Mappen und diese wiederum Tabellen.
Generell:
Wenn ihr wissen wollt, was für Eigenschaften oder Methoden benutzt werden können, so geht in Excel auf Macro aufzeichnen. Macht die Änderungen, welche ihr über OLE mit Excle machen wollt und beendet das Macro.
Geht dann in den Macro- Editor und schaut euch die sachen ma genauer an. Alle Eigenschaften oder Funktionen die dort verwendet werden könnt ihr auch benutzen.Hier eine geänderte Version der Excel- Wrapperklassen:
//--------------------------------------------------------------------------- #ifndef MLExcelH #define MLExcelH #include <ComObj.hpp> #include <Classes.hpp> #include <Graphics.hpp> class TMLWorkbook; class TMLWorksheet; class TMLExcel; //----------------------------------------------------------------------------- //------------------------------------------------------------------------------ //---------------------------------------------------------------------------- // Class TMLWorksheet //---------------------------------------------------------------------------- class TMLWorksheet { private: //Variablen int FMaxRows; int FMaxCols; Variant var_Sheet; TMLWorkbook *FParentWorkbook; TStringList * FRow; TStringList * FCol; //Methoden String __fastcall GetName(); void __fastcall SetName(String AName); int __fastcall GetIndex(); int __fastcall GetColCount(); int __fastcall GetRowCount(); TStringList* __fastcall GetCols(int Index); TStringList* __fastcall GetRows(int Index); String __fastcall GetCellString(int Col, int Row); void __fastcall SetCellString(int Col, int Row, String Text); void __fastcall SetCellString_Range(String Range,String Text); protected: public: // Eigenschaften __property String Name={read= GetName,write =SetName}; //der Name der Tabelle. Wenn Sie einen neuen Name vergeben wirddieser nur akzeptiert, wenn // dieser Name nicht in der aktuellen Arbeitsmappe voranden ist und nicht "" ist __property int MaxRows ={read=FMaxRows,write=FMaxRows}; // default==2000 ; Zeilenbegrenzung da in Excel die Anzahl der Zeilen nicht limitiert wird __property int MaxCols ={read=FMaxCols,write=FMaxCols}; // default==200 ; Spaltenbegrenzung da in Excel die Anzahl der Spalten nicht limitiert wird __property int Index ={read =GetIndex}; // gib den Index in der MLWorkbook- Instanz zurück //__property int RowCount = {read = GetRowCount}; // Anzahl der Zeilen //__property int ColCount = {read = GetColCount}; // Anzahl der Spalten __property TStringList* Cols[int Index]={read=GetCols}; // gibt die Spalte (Index) als Stringliste zurück ( bis MaxCols da sonst die Liste überlaufen würde) __property TStringList* Rows[int Index]={read=GetRows}; // gibt die Zeile (Index) als Stringliste zurück ( bis MaxRows da sonst die Liste überlaufen würde) __property String CellString[int Col][int Row]={read= GetCellString, write=SetCellString}; // Zellinhalte direkt setzen oder auslesen __property String CellStringByRange [String Range]={write=SetCellString_Range}; // Beispiel: String temp=Excel->Books[1]->Sheets[1]->CellStringByRange["A1:B6"]="Hallo"; __property Variant AsVariant={read=var_Sheet}; // die Tabelle als Variant (nur verwenden wenn unbeding Notwendig!) __property TMLWorkbook* Parent={read=FParentWorkbook}; // die Arbeitsmappe, in der sich dies Tabelle befindet //Methoden __fastcall TMLWorksheet(TMLWorkbook* AWorkbook,Variant ASheet); __fastcall ~TMLWorksheet(); void __fastcall Activate(); // macht die diese Tabelle zur aktuellen Tabelle in der Arbeitsmappe }; //---------------------------------------------------------------------------- // Class TMLWorkbook //---------------------------------------------------------------------------- class TMLWorkbook { private: //Variablen TList * FWorksheets; Variant var_Book; Variant var_Sheet; TStringList * FSheetNames; TMLWorksheet* FActiveWorksheet; int FIndex; TMLExcel* FParentExcel; //Methoden int __fastcall GetWorksheetCount(); String __fastcall GetName(); TStringList*__fastcall GetWorksheetNames(); int __fastcall GetIndex(); bool __fastcall GetConnect(); TMLWorksheet* __fastcall GetFromWorksheets(int Index); protected: public: //Eigenschaften __property String Name={read =GetName}; // der Vollständige Datename der Arbeitsmappe __property int Index ={read =GetIndex}; // gib den Index in der MLExcel- Instanz zurück __property TMLWorksheet* Sheets [int Index]= {read = GetFromWorksheets}; // Zugriff auf die Tabellen in der Arbeitsmappe __property int WorksheetCount = {read = GetWorksheetCount}; // Anzahl der Tabellen in der Arbeitsmappe __property TStringList* WorksheetNames={read=GetWorksheetNames}; // Stringliste derNamen aller Tabellen in der Arbeitsmappe
__property Variant AsVariant={read=var_Book}; // die Arbeitsmappe als Variant (nur verwenden wenn unbeding Notwendig!)
__property bool Connect ={read=GetConnect}; // ist true, wenn eine Verbindung mit einer Arbeitsmappe in Excel besteht __property TMLExcel* Parent={read=FParentExcel}; // die Excelinstanz, inder sich die Arbeitsmappe befindet //Methoden __fastcall TMLWorkbook(TMLExcel* excel, Variant book); __fastcall ~TMLWorkbook(); void __fastcall UpdateSheetList(); // Aktualisiert die Instanz. Notwendig, wenn zum Beispiel jemand in Excel etwas manuell ändert int __fastcall IndexOfWorksheets(String AName); // Gibt den Index der Tabelle anhand seines Namen zurück // gibt -1 zurück wenn keine Tabelle mit den Namen existiert void __fastcall Activate();//macht diese Arbeitsmappe zu aktuellen Arbeitsmappe in Excel bool SaveAs(String FileName);// Arbeitsmappe speichern als.. bool Save(); // Arbeitsmappe speichern void Add(); // neue Tabelle hinzufügen bool Add(String Name); // neue Tabelle hinzufügen und gleich einen Namen vergeben }; //---------------------------------------------------------------------------- // TMLExcel //---------------------------------------------------------------------------- class TMLExcel { private: //Variablen TList * FWorkbooks; bool FConnect; Variant var_Excel; TStringList * FBookNames; bool FVisible; bool FClose; //Methoden int GetWorkbookCount(); TStringList*__fastcall GetWorkbookNames(); void __fastcall SetVisible(bool temp); Variant __fastcall GetBooks(); bool __fastcall GetConnect(); void __fastcall SetConnect(bool temp); TMLWorkbook* __fastcall GetFromWorkbooks(int Index); protected: public: //Eigenschaften __property TStringList* WorkbookNames={read=GetWorkbookNames}; // Stringliste mit den vollständigen Dateinamen der Arbeitsmappen in der Excelinstanz __property int WorkbookCount={read=GetWorkbookCount}; // Anzahl der Arbeitsmappen in Excel __property TMLWorkbook* Books[int Index]={read=GetFromWorkbooks}; // Zugriffsmöglichkeit auf die einzelnen Arbeitsmappen __property bool Visible ={read=FVisible,write=SetVisible}; // Excel auf den Bildschirm anzeigen oder verbergen __property bool Connect = {read=GetConnect, write=SetConnect}; // mit Excel verbinden oder´die bestehende Verbindung trennen und Excel schliessen. __property Variant AsVariant={read=var_Excel}; // Die Excelinstanz als Variant __property bool CloseExcelOnTerminate={read=FClose,write=FClose}; //wenn true wird im Destruktor Excel geschlossen //Methoden __fastcall TMLExcel(); __fastcall ~TMLExcel(); void __fastcall UpdateBookList(); // Aktualisiert die Instance. Nur notwendig, wenn in Excel manuel Änderungen durchgeführt wurden int __fastcall IndexOfWorkbooks(String AName); // gibt den Index einer Arbeitsmappe anhand seines vollständigen(!) Dateinamens zurück bool OpenWorkbook(AnsiString BookName); // Arbeitsmappe öffnen ( BookName == Vollständiger DateiName der Arbeitsmappe) bool CloseWorkbook(AnsiString BookName); // Arbeitsmappe schliesen ( BookName == Vollständiger DateiName der Arbeitsmappe) bool SaveWorkbook(AnsiString BookName); // Arbeitsmappe speichern ( BookName == Vollständiger DateiName der Arbeitsmappe) bool SaveWorkbookAs(AnsiString BookName, String FileName);// Arbeitsmappe speichern ( BookName && FileName== Vollständiger DateiName der Arbeitsmappe) bool SaveWorkbookAs(int Index, String FileName); // Arbeitsmappe speichern(Index ist der Index der Arbietsmappe inerhalb dieser Instanz && BookName == Vollständiger DateiName der Arbeitsmappe) void NewWorkbook(); //neue Arbeitsmappe anlegen bool NewWorkbook(String FileName, bool Overwrite);// neue Arbeitsmappe anlegen und speichern unter FileName }; //--------------------------------------------------------------------------- #endif //--------------------------------------------------------------------------- #pragma hdrstop #include "MLExcel.h" #include <Dialogs.hpp> #include "SysUtils.hpp" //--------------------------------------------------------------------------- #pragma package(smart_init) //-------------------------------------------------------------------------- //############################################################################ //---------------------------------------------------------------------------- // Class TMLWorksheet //---------------------------------------------------------------------------- __fastcall TMLWorksheet::TMLWorksheet(TMLWorkbook* AWorkbook,Variant ASheet) :FParentWorkbook(AWorkbook),var_Sheet(ASheet) { FMaxRows=200; FMaxCols=50; FRow=new TStringList; FRow->Clear(); FCol=new TStringList; FCol->Clear(); } __fastcall TMLWorksheet::~TMLWorksheet() { if(FRow) delete FRow; if(FCol) delete FCol; } //---------------------------------------------------------------------------- void __fastcall TMLWorksheet::Activate() { var_Sheet.OleFunction("Activate"); } //---------------------------------------------------------------------------- //properties getters and setters //---------------------------------------------------------------------------- int __fastcall TMLWorksheet::GetIndex() { return FParentWorkbook->WorksheetNames->IndexOf(Name); } //---------------------------------------------------------------------------- String __fastcall TMLWorksheet::GetName() { return var_Sheet.OlePropertyGet("Name"); } //---------------------------------------------------------------------------- void __fastcall TMLWorksheet::SetName(String AName) { if(AName !="" && FParentWorkbook->IndexOfWorksheets(Name)<0) var_Sheet.OlePropertySet("Name",AName.c_str()); } //---------------------------------------------------------------------------- int __fastcall TMLWorksheet::GetColCount() { return var_Sheet.OlePropertyGet("Columns").OlePropertyGet("Count"); } //---------------------------------------------------------------------------- int __fastcall TMLWorksheet::GetRowCount() { return var_Sheet.OlePropertyGet("Rows").OlePropertyGet("Count"); } //---------------------------------------------------------------------------- TStringList* __fastcall TMLWorksheet::GetCols(int Index) { if(!FCol)FCol=new TStringList(); FCol->Clear(); for (int i=1;i<FMaxRows;i++) { FCol->Add(var_Sheet.OlePropertyGet("Cells",i,Index+1).OlePropertyGet("Value")); } return FCol; } //---------------------------------------------------------------------------- TStringList* __fastcall TMLWorksheet::GetRows(int Index) { if(!FRow)FRow=new TStringList(); FRow->Clear(); for (int i=1;i<FMaxCols;i++) { FRow->Add(var_Sheet.OlePropertyGet("Cells",Index+1,i).OlePropertyGet("Value")); } return FRow; } //---------------------------------------------------------------------------- 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()); } //--------------------------------------------------------------------------- void __fastcall TMLWorksheet::SetCellString_Range(String Range,String Text) { return var_Sheet.OlePropertyGet("Range",Range.c_str()).OlePropertySet("Value",Text.c_str()); } //--------------------------------------------------------------------------- //############################################################################ //---------------------------------------------------------------------------- // Class TMLWorkbook //---------------------------------------------------------------------------- __fastcall TMLWorkbook::TMLWorkbook(TMLExcel* excel, Variant book) :FParentExcel(excel),var_Book(book) { FSheetNames=new TStringList; FWorksheets=new TList; FWorksheets->Clear(); } //---------------------------------------------------------------------------- __fastcall TMLWorkbook::~TMLWorkbook() { delete FSheetNames; FWorksheets->Clear(); delete FWorksheets; } //---------------------------------------------------------------------------- void TMLWorkbook::Add() { var_Book.OlePropertyGet("Sheets").OleFunction("Add"); UpdateSheetList(); } //---------------------------------------------------------------------------- bool TMLWorkbook::Add(String Name) { var_Book.OlePropertyGet("Sheets").OleFunction("Add"); UpdateSheetList(); var_Book.OlePropertyGet("Sheets",WorksheetCount).OlePropertySet("Name",Name.c_str()); UpdateSheetList(); } //----------------------------------------------------------------------------- bool TMLWorkbook::SaveAs(String FileName) { try { var_Book.OleFunction("SaveAs",FileName.c_str()); return true; } catch(...) { return false; } } //----------------------------------------------------------------------------- bool TMLWorkbook::Save() { try { var_Book.OleFunction("Save"); return true; } catch(...) { return false; } } //---------------------------------------------------------------------------- void __fastcall TMLWorkbook::Activate() { var_Book.OleFunction("Activate"); } //----------------------------------------------------------------------------- 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); } } } //---------------------------------------------------------------------------- int __fastcall TMLWorkbook::IndexOfWorksheets(String AName) { return WorksheetNames->IndexOf(AName); } //---------------------------------------------------------------------------- //properties getters and setters //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- String __fastcall TMLWorkbook::GetName() { if(Connect) return var_Book.OlePropertyGet("FullName"); else return ""; } //---------------------------------------------------------------------------- bool __fastcall TMLWorkbook::GetConnect() { return !VarIsEmpty(var_Book); } //---------------------------------------------------------------------------- int __fastcall TMLWorkbook::GetWorksheetCount() { if(Connect) return var_Book.OlePropertyGet("Worksheets").OlePropertyGet("Count"); else return 0; } //---------------------------------------------------------------------------- TStringList*__fastcall TMLWorkbook::GetWorksheetNames() { UpdateSheetList(); return FSheetNames; } //---------------------------------------------------------------------------- int __fastcall TMLWorkbook::GetIndex() { return FParentExcel->WorkbookNames->IndexOf(Name); } //----------------------------------------------------------------------------- TMLWorksheet* __fastcall TMLWorkbook::GetFromWorksheets(int Index) { UpdateSheetList(); if( Index >=0 && Index <WorksheetCount) { return (TMLWorksheet*) FWorksheets->Items[Index]; } else return NULL; } //---------------------------------------------------------------------------- //############################################################################# //---------------------------------------------------------------------------- // TMLExcel //---------------------------------------------------------------------------- // public methods __fastcall TMLExcel::TMLExcel() { try { FClose=true; FVisible=false; FBookNames=new TStringList; FBookNames->Clear(); var_Excel=CreateOleObject("Excel.Application"); // Excelinstanz zu Kontrollzwecken sichtbar machen var_Excel.OlePropertySet("Visible", FVisible); //var_Books = var_Excel.OlePropertyGet("Workbooks"); FWorkbooks=new TList; FWorkbooks->Clear(); UpdateBookList(); } catch (...) { } } //---------------------------------------------------------------------------- __fastcall TMLExcel::~TMLExcel() { delete FBookNames; FWorkbooks->Clear(); delete FWorkbooks; if(Connect && FClose) var_Excel.OleFunction("Quit"); } //---------------------------------------------------------------------------- bool TMLExcel::OpenWorkbook(AnsiString BookName) { try { if(Connect && (IndexOfWorkbooks(BookName)+1)<=0) { Procedure Open("Open"); var_Excel.OlePropertyGet("Workbooks").Exec(Open << BookName); UpdateBookList(); return true; } else return false; } catch (...) { return false; } } //---------------------------------------------------------------------------- bool TMLExcel::CloseWorkbook(AnsiString BookName) { try { int temp=IndexOfWorkbooks(BookName); if(Connect && temp) var_Excel.OlePropertyGet("Workbooks",temp).OleProcedure("Close"); else return false; UpdateBookList(); return true; } catch (...) { return false; } } //---------------------------------------------------------------------------- bool TMLExcel::SaveWorkbook(AnsiString BookName) { try { int temp=IndexOfWorkbooks(BookName); if(Connect && ++temp) var_Excel.OlePropertyGet("Workbooks",temp).OleProcedure("Save"); else return false; UpdateBookList(); return true; } catch (...) { return false; } } //---------------------------------------------------------------------------- bool TMLExcel::SaveWorkbookAs(AnsiString BookName, String FileName) { try { int temp=IndexOfWorkbooks(BookName); if(Connect && ++temp) var_Excel.OlePropertyGet("Workbooks",temp).OleProcedure("SaveAs",(Variant) FileName); else return false; UpdateBookList(); return true; } catch (...) { return false; } } //---------------------------------------------------------------------------- bool TMLExcel::SaveWorkbookAs(int Index, String FileName) { try { Index++; if(Connect && Index && Index <=WorkbookCount) var_Excel.OlePropertyGet("Workbooks",Index).OleFunction("SaveAs",FileName.c_str()); else return false; UpdateBookList(); return true; } catch (...) { return false; } } //---------------------------------------------------------------------------- void __fastcall TMLExcel::UpdateBookList() { if(!(WorkbookCount ==FBookNames->Count || WorkbookCount ==FWorkbooks->Count )) { FBookNames->Clear(); for( int i=FWorkbooks->Count-1;i>=0;i--) { TMLWorkbook* book= reinterpret_cast <TMLWorkbook*>( FWorkbooks->Items[i]); if(book) delete book; } FWorkbooks->Clear(); if(Connect && WorkbookCount>0 ) { for( int i=1;i<=WorkbookCount;i++) { FBookNames->Add(var_Excel.OlePropertyGet("Workbooks",i).OlePropertyGet("FullName")); TMLWorkbook * book=new TMLWorkbook(this,(Variant)var_Excel.OlePropertyGet("Workbooks",i)); FWorkbooks->Add((void*)book); } } } //ShowMessage(FBookNames->Text); } //---------------------------------------------------------------------------- int __fastcall TMLExcel::IndexOfWorkbooks(String AName) { return WorkbookNames->IndexOf(AName); } //---------------------------------------------------------------------------- void TMLExcel::NewWorkbook() { if( Connect) { var_Excel.OlePropertyGet("WorkBooks").OleFunction("Add"); UpdateBookList(); } } //---------------------------------------------------------------------------- bool TMLExcel::NewWorkbook(String FileName, bool Overwrite) { if (Connect && (FileExists(FileName) && Overwrite) || !FileExists(FileName)) { try { if(IndexOfWorkbooks(FileName)<0) { var_Excel.OleFunction("Add"); UpdateBookList(); var_Excel.OlePropertyGet("Woorkbooks",WorkbookCount).OleFunction("SaveAs",FileName.c_str()); UpdateBookList(); return true; } else { CloseWorkbook(FileName); var_Excel.OleFunction("Add"); UpdateBookList(); var_Excel.OlePropertyGet("Woorkbooks",WorkbookCount).OleFunction("SaveAs",FileName.c_str()); UpdateBookList(); return true; } } catch(...) { return false; } } else return false; } //---------------------------------------------------------------------------- //properties getters and setters //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- bool __fastcall TMLExcel::GetConnect() { return !VarIsEmpty(var_Excel); } //---------------------------------------------------------------------------- void __fastcall TMLExcel::SetConnect(bool temp) { if(!temp)var_Excel.OleFunction("Quit"); else { if(VarIsEmpty(var_Excel)) { try { FVisible=false; FBookNames=new TStringList; FBookNames->Clear(); var_Excel=CreateOleObject("Excel.Application"); var_Excel.OlePropertySet("Visible", FVisible); FWorkbooks->Clear(); UpdateBookList(); } catch (...) { } } } } //---------------------------------------------------------------------------- int TMLExcel::GetWorkbookCount() { if(!Connect) return 0; else return var_Excel.OlePropertyGet("Workbooks").OlePropertyGet("Count"); } //---------------------------------------------------------------------------- TStringList*__fastcall TMLExcel::GetWorkbookNames() { UpdateBookList(); return FBookNames; } //---------------------------------------------------------------------------- void __fastcall TMLExcel::SetVisible(bool temp) { if(!Connect) FVisible=false; else FVisible=temp; var_Excel.OlePropertySet("Visible", FVisible); } //---------------------------------------------------------------------------- TMLWorkbook* __fastcall TMLExcel::GetFromWorkbooks(int Index) { UpdateBookList(); if(WorkbookCount && Index >=0 && Index <WorkbookCount) { return (TMLWorkbook*) FWorkbooks->Items[Index]; } else return NULL; } //---------------------------------------------------------------------------- Variant __fastcall TMLExcel::GetBooks() { return var_Excel.OlePropertyGet("Workbooks"); } //----------------------------------------------------------------------------
-
Beispielprojekt:
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "MLExcel.h" //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: TButton *Button1; TButton *Button2; TEdit *Edit1; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: public: __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(); TMLExcel * Excel; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Excel =new TMLExcel; Excel->Visible=true; } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1() { delete Excel; } //---------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Excel->OpenWorkbook(Edit1->Text); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { ShowMessage(Excel->Books[0]->Sheets[0]->CellString[0][0]); } //---------------------------------------------------------------------------