![]() |
Ошибка при закрытии Excel из под Builder 6!
День добрый, господа!
помогите решить следующую проблему: открываю через OLE лист эксэля с помошью команд AppX = Variant::CreateObject("Excel.Application"); AppX.OlePropertyGet("WorkBooks").OleProcedure("Open",XslFile.c_str()); ShX=AppX.OlePropertyGet("WorkSheets",3); всё нормально работает! считаваю и записываю данные, но при попытке сохранить и выйти их приложения AppX.OlePropertyGet("WorkBooks",1).OleProcedure("Save"); AppX.OlePropertyGet("WorkBooks").OleProcedure("Close"); AppX.OleProcedure("Quit"); вылезает ошибка IsBound() failed @ c:\bcb\emuvcl\ulilcls.h/4249 что примечательно, если не производить никаких операций с данными, а просто открыть и закрыть эксэль с помощью перечисленных команд, всё срабатывает без ошибок!!! Если кто знает, намекните хоть в чём проблема!!1 |
Чисто гипотетически - а после Save ждать не надо?
|
так ведь ошибка появляется сразу, не давая выполнить ни одной комманды!
кстати, ошибка одинаковая на каждой строке, если другие отулючить! |
Ошибка возникает при компиляции, я так понимаю?
Приведи побольше кода. Особенно считывание и запись данных. |
нет, компиляция проходит нормально! без ошибок!
ошибка возникает при вызове процедур для закрытия и сохранения экселевского до-та! открытие файла: void __fastcall TForm1::ExcelOpenXSL(AnsiString XslFile) { if (XslFile!="") {AppX = Variant::CreateObject("Excel.Application"); AppX.OlePropertyGet("WorkBooks").OleProcedure("Open",XslFile.c_str()); ShX=AppX.OlePropertyGet("WorkSheets",3); } else { ShowMessage("Не заполнено поле Служебка(xls)!"); } if(!AppX.IsEmpty())AppX.OlePropertySet("Visible",true); запись данных: void __fastcall TForm1::toExcelCell(int Row,int Column, AnsiString data, Variant Sh) { try { Variant cur = Sh.OlePropertyGet("Cells", Row,Column); cur.OlePropertySet("Value", data.c_str()); } catch(...) { ; } чтение данных: Variant __fastcall TForm1::fromExcelCell(int Row, int Column, Variant Sh) { Variant result,cur; cur = Sh.OlePropertyGet("Cells",Row,Column); result = cur.OlePropertyGet("Value"); return result; } |
у меня с экселем была какая-то проблема, она решалась просто: AppX->Release(); А вообще я советую сначала отладить на скрипте:
Код:
// test.js |
1. Откуда у тебя взялся этот файл c:\bcb\emuvcl\ulilcls.h? В моем BCB6 его нет, и папки emuvcl нет.
2. Твой код у меня работате нормально. 3. try/catch, думаю, лишнее. Давай больше кода. |
не знаю почему система выдаёт этот адрес, на самом деле адрес следующий:
\Program Files\Borland\CBuilder6\Include\Vcl\ulilcls.h Спасибо большое "Alexej77" и "pva"! Я понял как исправить ошибку, но вот почему так я не понял! Дело в том, что я получаю 3 страницу: ShX=AppX.OlePropertyGet("WorkSheets",3); А сохранять и закрывать нужно 1 (книгу)??? AppX.OlePropertyGet("WorkBooks",1).OleProcedure("Save"); AppX.OlePropertyGet("WorkBooks",1).OleProcedure("Сlose"); да был и ещё один косячок, но это моя ошибка!!! Ещё раз большое спасибо! |
Время: 19:42. |
Время: 19:42.
© OSzone.net 2001-