Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с открытием файла Excel

36K
16 марта 2010 года
Overmax2
63 / / 11.02.2010
В программе открываю .xls файл чтобы взять от туда данные, вот код
Код:
class OutExcel{
 public:
   String **dan;
   int columns;
   int rows;

   OutExcel(int rows,int columns);
   ~OutExcel();
   void setDan(int x,int y,String zn);
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
OutExcel::OutExcel(int rows,int columns){
 this->rows=rows;
 this->columns=columns;
 dan= new String *[rows];
  for(int i=0;i<rows;i++)
   dan=new String[columns];
}

OutExcel::~OutExcel(){
 delete dan;
}

//---------------------------------------------------------------------------
void OutExcel::setDan(int x,int y,String zn){
 dan[x][y]=zn;
}

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
OutExcel* excelFunOpen(WideString filename){

 Variant App, Sh, Cl;
 WideString wStr;
 String Str;
 OutExcel *Excel;

 try {
  App=Variant::GetActiveObject("Excel.Application");
 }
 catch(...) {
  try {
   App=Variant::CreateObject("Excel.Application");
  }
  catch (...) {
   Application->MessageBox("Невозможно открыть Microsoft Excel!"
    "Возможно Excel не установлен на компьютере.","Ошибка",MB_OK+MB_ICONERROR);
  }
 }
 try {
  //App.OlePropertySet("Visible", "True");
  App.OlePropertyGet("Workbooks").OleProcedure("Open",filename);
  Sh=App.OlePropertyGet("WorkSheets",1);
  }
 catch(Exception &e) {
  ShowMessage("Ошибка открытия книги Microsoft Excel!" +e.Message);
 }
 try {
  int columns=Sh.OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count");
  int rows=Sh.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count");
  Excel=new OutExcel(rows,columns);
  for(int i=0;i<rows;i++){
   //if (i==0) StringGrid->Cells[0][0]="№ выборки"; else StringGrid->Cells[0]=i;
   for(int j=0;j<columns;j++){
      Cl = Sh.OlePropertyGet("Cells",i+1,j+1);
      Str= Cl.AsType(varString);
      Excel->setDan(i,j,Str);
    }
   }
 }
 catch(Exception &e){
  ShowMessage("Ошибка: "+e.Message);
 }
 App.OleProcedure("Quit");
 return Excel;
}


Такая проблема:
Если когда я хочу загрузить из файла данные,в это время открыт Excel то ничего не загружается выдаётся ошибка открытия книги.
Если когда я уже загрузил данные в программу, я попытаюсь открыть тот файл Excel из которого я загружал их то ничего не выйдёт, эксель не запустится.
И даже после того как я закрываю свою программу я попытаюсь открыть тот файл из которого я загружал данные то он всё равно не откроется.

Файл этот можно открыть только после того как я открою другой excel файл а потом этот, после этого он уже открывается нормально.

Как это исправить?

P.S. Вкладкой Office в Borlande не пользовался.
27K
16 марта 2010 года
alexmalyaev
35 / / 25.07.2008
После
Sh=App.OlePropertyGet("WorkSheets",1);
Объект надо активировать
Sh.OleProcedure("Activate");
36K
16 марта 2010 года
Overmax2
63 / / 11.02.2010
Спасибо помогло идеально !!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог