Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Borland C++ Builder/Turbo C++ Explorer > работа с Excel в XE2 |
Автор: Дима 20.12.11, 13:50 |
перешёл с 2007-го на XE2... Уже кучу проблем поборол и давно радуюсь новому XE2... Но тут всплыли траблы с работой в Excel. Был создан небольшой класс работающий через OLE с Excel... Отказывается работать! Вот кусок кода для примера: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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"); при попытке выполнить <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> вылетает ошибка "EOleSysError Неверный тип переменной"...var_Sheet.OlePropertyGet("Range","A1"); в настройках проекта стоит "_TCHAR maps to : char" пробую так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> var_Sheet.OlePropertyGet("Range",(wchar_t)"A1"); вообще вылетает OLE error 800A03EC... |
Автор: artsb 29.12.11, 08:08 |
Пробуйте: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> var_Cell = var_Sheet.OlePropertyGet(L"Range",L"A1"); // или var_Cell = var_Sheet.OlePropertyGet(L"Range",WideString(L"A1")); Ещё можно через "Cells" <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> var_Cells = var_Sheet.OlePropertyGet(L"Cells"); var_Cell = var_Cells.OlePropertyGet(L"Item", _Col_, _Row_); |
Автор: Дима 29.12.11, 08:12 |
Спасибо, к этому времени я уже освоил TApplicationExcel. Оказалась ОЧЕНЬ удобная штука. Выпадающие списки методов весьма кстати - учитывая то что нет обширной документации по работе с Ole. |
Автор: artsb 29.12.11, 08:22 |
Ясно. У меня XE и в нём нет TApplicationExcel... Хотя помнится, что в более старых версиях он был. Похоже возродили... Или вы установили пакет отдельно? |
Автор: Дима 29.12.11, 08:31 |
Цитата artsb @ У меня XE и в нём нет TApplicationExcel... Хотя помнится, что в более старых версиях он был. Похоже возродили... Или вы установили пакет отдельно? Его не убрали и не возрождали - просто по умолчанию отключили. В Project->Options->Packages включил птичку "C++ Builder Office 2000 Servers Package" Но даже после апдейта хелпа эта птичка опять была выключена. Embarcadero как-бы намекает - пользоваться им не надо |
Автор: artsb 29.12.11, 09:47 |
Ах вот оно в чём дело Действительно есть такой пакет. Значит, я так "хотел" использовать эти компоненты, что аж прямо поленился их поискать Спасибо. |
Автор: vepdl 18.01.12, 10:17 |
Подскажите где найти 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) ) |
Автор: Дима 20.01.12, 07:16 |
После включения галки появляется раздел Office2K. Там и есть TApplicationExcel. |
Автор: vepdl 24.01.12, 06:40 |
Подскажите, где взять документацию для ExcelApplication (желательно с примерами). |
Автор: Дима 24.01.12, 19:14 |
у Borland-a, а теперь Embarcadero нет описания этих компонентов Могу дать свой класс работы с Excel, сделанный на основе TApplicationExcel. Правда там методов там кот наплакал, самое основное что мне надо было. Дописывать буду мере необходимости. |
Автор: vepdl 25.01.12, 03:50 |
Если можно. Спасибо. (vepdl собака mail.ru) |
Автор: Vix 11.01.22, 07:14 |
лечение "EOleSysError Неверный тип переменной": привести указатель к типу OleVariant <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> void TFExcel::toExcelCell(int Row,int Column, AnsiString data) { try { Sh.OlePropertyGet("Cells", Row,Column).OlePropertySet("Value", (OleVariant)data.c_str()); } catch(...) { ; } } |