![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Гость_sam |
|
|||
|
Unregistered |
Помогите разобраться с Excel'евскими COM-серверами TExcelApplication, TExcelWorkbook, TExcelWorkSheet в C++ Builder.
Есть проблема: не могу получить доступ к ячейкам листа (прочитать, записать) через Range, Cell и т.п. PS: решения через OleProperty не предлагать, хочется всё сделать через TExcel*. Пример моего кода (работающей части): {... // ------------------ запускаем сервер Excel --------------------------------- bool ExcelWasClosed = false; //флаг запущенного Excel _ApplicationDisp app; //диспетчер-интерфейс для работы с объектом Application TNoParam qq; //отсутствие параметра (EmptyParam) в вызовах некоторых функций try { //пытаемся присоединиться к запущенному Excel HRESULT result=app.BindToActive(CLSID_ExcelApplication); if (!SUCCEEDED(result)) //в системе нет запущенного Excel { ExcelWasClosed = true; //Excel всё-таки не запущен или даже не установлен result=app.Bind(CLSID_ExcelApplication); //запускаем Excel } if (SUCCEEDED(result)) //проверка результата запуска { //--------------действия при установленном и запущенном Excel на компьютере------ //задаём имя файла для сохранения MainFrm->MainSave->Title = "Экспорт данных в Excel ..."; MainFrm->MainSave->Filter = "Файлы MS Excel(*.xls)|*.xls|Все файлы (*.*)|*.*"; MainFrm->MainSave->DefaultExt = "xls"; if(MainFrm->MainSave->Execute()) { if (ExcelWasClosed) app.Visible = true; //делаем видимым приложение, если это нужно //работа с новой книгой (создаётся новый файл с книгой) //число листов в новой книге ExcelApplication1->SheetsInNewWorkbook[LOCALE_USER_DEFAULT] = 1; //создали новую книгу ExcelApplication1->Workbooks->Add(); //подключили компонент с формы к созданной книге MyWorkbook->ConnectTo(ExcelApplication1->Get_Workbooks()->get_Item(1)); //сохранение в файл MyWorkbook->SaveAs(MainFrm->MainSave->FileName,qq,qq,qq,qq,qq,xlNoChange,qq,qq,qq,qq,LOCALE_USER_DEFAULT); //работа с листами в книге //соединяемся с активным листом MyWorksheet->ConnectTo(ExcelApplication1->ActiveSheet); AnsiString qs = "abcdefgh"; int len=qs.Length(); //число символов в имени листа //даём имя листу (довольно ракообразно) !!!! MyWorksheet->Name = qs.WideChar(MyWorksheet->Name, len); //работа с ячейками на листе //вот здесь-то ничего и не получается !!!! //закрытие файла с сохранением без переспрашивания MyWorkbook->Close(true,qq,qq,LOCALE_USER_DEFAULT); } else { ShowMessage("Export in Excel: Файл " + MainFrm->MainSave->FileName + " не удаётся создать."); } if (ExcelWasClosed) app.Quit(); //завершение работы с Excel, если он не был открыт до нас } else { ShowMessage("Не удалось запустить Excel. Возможно, он у Вас не установлен."); return; } } catch (Exception& E) { ShowMessage("Ошибка при работе с Excel."); } } |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |