При загрузке данных из Excel в стрингрид по нажтию кнопки делаю так....
| Код | void __fastcall TForm1::Button1Click(TObject *Sender) { if(!OpenDialog1->Execute()) return; ExcelClass.CreateApplication(); ExcelClass.OpenDocument(OpenDialog1->FileName); for(int i=1;i<1000;i++) for(int j=1;j<15;j++) StringGrid1->Cells[j][i] = ExcelClass.GetCell(i,j); ExcelClass.CloseAppication();
|
Код класса:
| Код | //--------------------------------------------------------------------------- void __fastcall TExcelClass::CreateApplication() { Excel=CreateOleObject("Excel.Application"); } //--------------------------------------------------------------------------- void __fastcall TExcelClass::OpenDocument(AnsiString FileName) { TemplatePath=FileName+"t"; Excel.OlePropertyGet("Workbooks").OleProcedure("Open",FileName.c_str()); } //--------------------------------------------------------------------------- void __fastcall TExcelClass::CloseAppication() { DeleteFileA(TemplatePath); Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs",TemplatePath.c_str()); DeleteFileA(TemplatePath); Excel.OlePropertyGet("Workbooks").OleProcedure("Close"); Excel.Clear(); Excel = Unassigned; } //--------------------------------------------------------------------------- AnsiString TExcelClass::GetCell(int i,int j) { return Excel.OlePropertyGet("Cells",i,j).OlePropertyGet("Value"); }
|
Так вот всё работает но проблема в том, что мы не знаем скока строк в файле екселя... и мне надо как то избавиться от цикла....
| Код | for(int i=1;i<1000;i++) for(int j=1;j<15;j++) StringGrid1->Cells[j][i] = ExcelClass.GetCell(i,j);
|
С OLE давно не работала, можно ли как то определить что данные в екселевском файле закончились? а не пробегать пустые строчки? Есть ли такая функция? |