На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> работа с Excel в XE2 , ...
    перешёл с 2007-го на XE2... Уже кучу проблем поборол и давно радуюсь новому XE2...

    Но тут всплыли траблы с работой в Excel. Был создан небольшой класс работающий через OLE с Excel...
    Отказывается работать!


    Вот кусок кода для примера:
    ExpandedWrap disabled
       Variant var_Excel,var_Book,var_Sheet,var_Cell;
       
       var_Excel=Variant::CreateObject("Excel.Application");
       var_Excel.OlePropertySet("Visible",true);
       
       var_Book=var_Excel.OlePropertyGet("Workbooks").OlePropertyGet("Add");
       var_Sheet = var_Book.OlePropertyGet("Worksheets",1);
       var_Sheet.OleProcedure("Activate");
       
       var_Cell = var_Sheet.OlePropertyGet("Range","A1");//НА ЭТОЙ СТРОЧКЕ ОШИБКА
       var_Cell.OlePropertySet("Value","Hello world");
       
       var_Book.OleProcedure("Save");
       var_Excel.OleProcedure("Quit");


    при попытке выполнить
    ExpandedWrap disabled
      var_Sheet.OlePropertyGet("Range","A1");
    вылетает ошибка "EOleSysError Неверный тип переменной"...


    в настройках проекта стоит "_TCHAR maps to : char" пробую так:
    ExpandedWrap disabled
      var_Sheet.OlePropertyGet("Range",(wchar_t)"A1");

    вообще вылетает OLE error 800A03EC...
      Пробуйте:
      ExpandedWrap disabled
        var_Cell = var_Sheet.OlePropertyGet(L"Range",L"A1");
        // или
        var_Cell = var_Sheet.OlePropertyGet(L"Range",WideString(L"A1"));

      Ещё можно через "Cells"
      ExpandedWrap disabled
        var_Cells = var_Sheet.OlePropertyGet(L"Cells");
        var_Cell = var_Cells.OlePropertyGet(L"Item", _Col_, _Row_);
        Спасибо, к этому времени я уже освоил TApplicationExcel. Оказалась ОЧЕНЬ удобная штука.
        Выпадающие списки методов весьма кстати - учитывая то что нет обширной документации по работе с Ole.
          Ясно. У меня XE и в нём нет TApplicationExcel... Хотя помнится, что в более старых версиях он был. Похоже возродили... Или вы установили пакет отдельно?
            Цитата artsb @
            У меня XE и в нём нет TApplicationExcel... Хотя помнится, что в более старых версиях он был. Похоже возродили... Или вы установили пакет отдельно?

            Его не убрали и не возрождали - просто по умолчанию отключили.
            В Project->Options->Packages включил птичку "C++ Builder Office 2000 Servers Package"

            Но даже после апдейта хелпа эта птичка опять была выключена. Embarcadero как-бы намекает - пользоваться им не надо :D
              Ах вот оно в чём дело :) Действительно есть такой пакет. Значит, я так "хотел" использовать эти компоненты, что аж прямо поленился их поискать :)
              Спасибо.
                Подскажите где найти TApplicationExcel. Галку включил.

                У меня на var_Excel.OleProcedure("Quit"); выбрасывает с Break (First chance exception at $75ABD36F. Exception class $40000015 with message 'system exception (code 0x40000015) at 0x75abd36f'. Process SM.exe (4416)
                )
                  Цитата vepdl @
                  Подскажите где найти TApplicationExcel. Галку включил.

                  После включения галки появляется раздел Office2K. Там и есть TApplicationExcel.
                    Подскажите, где взять документацию для ExcelApplication (желательно с примерами).
                      Цитата vepdl @
                      Подскажите, где взять документацию для ExcelApplication (желательно с примерами).

                      Google
                      у Borland-a, а теперь Embarcadero нет описания этих компонентов

                      Могу дать свой класс работы с Excel, сделанный на основе TApplicationExcel.
                      Правда там методов там кот наплакал, самое основное что мне надо было. Дописывать буду мере необходимости.
                        Если можно. Спасибо. (vepdl собака mail.ru)
                        Сообщение отредактировано: vepdl -
                          лечение "EOleSysError Неверный тип переменной":

                          привести указатель к типу OleVariant

                          ExpandedWrap disabled
                            void TFExcel::toExcelCell(int Row,int Column, AnsiString data)
                            {
                                try {
                                    Sh.OlePropertyGet("Cells", Row,Column).OlePropertySet("Value", (OleVariant)data.c_str());
                                } catch(...) {
                                 ;
                                }
                            }
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0335 ]   [ 17 queries used ]   [ Generated: 19.04.24, 00:14 GMT ]