Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не получается открыть Excel фаил 
:(
    Опции темы
lesniken
Дата 21.7.2010, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 22.3.2009

Репутация: нет
Всего: нет



при попытке открыть файл экселя формирует исключение. не пойму что не так
вот код
Код

                 try
        {
            vVarApp=CreateOleObject("Excel.Application");
        }
        catch(...)
        {
            MessageBox(0, "Ошибка при открытии сервера Excel", "Ошибка", MB_OK);
            return;
        }
        vVarApp.OlePropertySet("Visible", true);
        vVarBooks=vVarApp.OlePropertyGet("Workbooks");
     //    vVarApp.OlePropertySet("SheetsInNewWorkbook", 3);   // для нового
     //    vVarBooks.OleProcedure("Add");

        AnsiString vAsCurDir, vAsTempletFile, vAsExitFile;
        vAsCurDir = GetCurrentDir();
     //    vAsCurDir = vAsCurDir.Trim();
        vAsTempletFile = vAsCurDir+"\\Отчет.xlt";

        vVarBooks.OleProcedure("Open", vAsTempletFile.c_str());



вот сообщение
---------------------------
Debugger Exception Notification
---------------------------
Project report.exe raised exception class EOleSysError with message 'Ошибка'.
---------------------------
Break   Continue   Help   
---------------------------

и ссылается сюда
Код

#if defined(VARIANT_AUTOMATION_SUPPORT)
  template <class P1>
  void Variant::OleProcedure(const String& name, P1 p1)
  {
    TAutoArgs<1> args;
    args[1] = p1;
    OleProcedure(name, static_cast<TAutoArgsBase*>(&args));
  }


может хоть кто какую идею подкинет, в каком направлении можно покопаться? пишу на c++ Builder 2009

Это сообщение отредактировал(а) lesniken - 21.7.2010, 13:48
PM MAIL   Вверх
NightElf
Дата 22.7.2010, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.2.2006
Где: Украина, Луганска я обл.

Репутация: нет
Всего: нет



lesniken
Цитата

...
 vVarApp=CreateOleObject("Excel.Application");
...

Не объявил тип переменной vVarApp
Код

Variant  vVarApp;
 vVarApp=CreateOleObject("Excel.Application");

PM MAIL ICQ   Вверх
lesniken
Дата 22.7.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 22.3.2009

Репутация: нет
Всего: нет



все объявлено просто выше
написал такой обработчик
Код

catch(EOleSysError &e)
        {
            MessageBox(0, (e.Message+" "+ IntToStr(int(e.ErrorCode))).t_str(), "Ошибка",MB_OK+MB_ICONERROR);
        }


выдает такой код ошибки -2147352567

в hex это 80020009

че дальше делать не знаю

Это сообщение отредактировал(а) lesniken - 22.7.2010, 12:58
PM MAIL   Вверх
Lim4
Дата 22.7.2010, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не под ковром
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.7.2008

Репутация: нет
Всего: 7



Цитата(lesniken @  21.7.2010,  10:59 Найти цитируемый пост)
 vAsTempletFile = vAsCurDir+"\\Отчет.xlt";

Код

vAsTempletFile = vAsCurDir+"\\Отчет.xls";
?

Добавлено через 1 минуту и 55 секунд
или *.xlsx в зависимости от версии Офиса.

Это сообщение отредактировал(а) Lim4 - 22.7.2010, 14:21
PM MAIL   Вверх
NightElf
Дата 22.7.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.2.2006
Где: Украина, Луганска я обл.

Репутация: нет
Всего: нет



Вот реально работающий кусок кода
на форму кинь OpenDialog1 и кнопку BitBtn1
Код

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   OpenDialog1->Filter = "Excell files|*.xls;*.xlsx";
   OpenDialog1->FilterIndex = 0;
   if (OpenDialog1->Execute() == true)
   {
      String FileNam = OpenDialog1->FileName;
      Variant Excel;
      Variant Book;
      Variant Sheet;

      Excel=CreateOleObject("Excel.Application");
      Excel.OlePropertySet("Visible",true);
      Book=Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", AnsiString(FileNam).c_str());
      Sheet=Book.OlePropertyGet("Worksheets", 1);

      //Excel.OleProcedure("Quit");  //без неё EXCEL.exe не закроется, если не делали её видимой
   }
}



Это сообщение отредактировал(а) NightElf - 22.7.2010, 14:33
PM MAIL ICQ   Вверх
lesniken
Дата 22.7.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 22.3.2009

Репутация: нет
Всего: нет



Цитата

Цитата(lesniken @  21.7.2010,  10:59 )
 vAsTempletFile = vAsCurDir+"\\Отчет.xlt";

код C++ Builder
1:
vAsTempletFile = vAsCurDir+"\\Отчет.xls";
?

Добавлено через 1 минуту и 55 секунд
или *.xlsx в зависимости от версии Офиса.


.xlt это тоже самое просто шаблон, он ничем не отличается вроде ))))


NightElf спасибо за код у меня он работает
в результате пришел к тому что если передавать строку так то все нормально
Код

String FileNam = OpenDialog1->FileName;
      Excel=CreateOleObject("Excel.Application");
      Excel.OlePropertySet("Visible",true);
      Book=Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", AnsiString(FileNam).c_str());


а если так то не работает, почему не пойму вроде все одинаковое
Код

         Excel=CreateOleObject("Excel.Application");
         Excel.OlePropertySet("Visible",true);

         String usFileNam = GetCurrentDir()+"\\Отчет.xls";
                 char *cFileNam= usFileNam.t_str();
         MessageBox(0, cFileNam, "Ошибка", MB_OK);

         Book=Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", AnsiString(usFileNam).c_str());


может кто знает в чем здесь разница?
PM MAIL   Вверх
lesniken
Дата 23.7.2010, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 22.3.2009

Репутация: нет
Всего: нет



еще сейчас появилась идея такая
я как поставил С++Builder 2009 у меня каждый день слетаю админские права, может как то с этим связано что не компилится, так щас вот сижу под минимальными правами могу только с папкой мои документы работать и перестало запускаться даже когда через 
OpenDialog1->FileName
открываешь
можете что посоветовать?
PM MAIL   Вверх
lesniken
Дата 25.7.2010, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 22.3.2009

Репутация: нет
Всего: нет



все заработало, спасибо всем
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.