Показать полную графическую версию : Ошибка при закрытии Excel из под Builder 6!
SGKorotkow
30-04-2008, 18:13
День добрый, господа!
помогите решить следующую проблему:
открываю через 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 ждать не надо?
SGKorotkow
02-05-2008, 10:00
так ведь ошибка появляется сразу, не давая выполнить ни одной комманды!
кстати, ошибка одинаковая на каждой строке, если другие отулючить!
Alexej77
03-05-2008, 11:36
Ошибка возникает при компиляции, я так понимаю?
Приведи побольше кода. Особенно считывание и запись данных.
SGKorotkow
04-05-2008, 16:23
нет, компиляция проходит нормально! без ошибок!
ошибка возникает при вызове процедур для закрытия и сохранения экселевского до-та!
открытие файла:
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
var AppX = new ActiveObject("Excel.Application");
AppX.WorkBooks.Open(/*XslFile.c_str()*/ "my_workbook");
var ShX=AppX.WorkSheets(3);
AppX.WorkBooks(1).Save();
AppX.WorkBooks.Close();
AppX.Quit();
Alexej77
06-05-2008, 01:15
1. Откуда у тебя взялся этот файл c:\bcb\emuvcl\ulilcls.h? В моем BCB6 его нет, и папки emuvcl нет.
2. Твой код у меня работате нормально.
3. try/catch, думаю, лишнее.
Давай больше кода.
SGKorotkow
06-05-2008, 10:06
не знаю почему система выдаёт этот адрес, на самом деле адрес следующий:
\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");
да был и ещё один косячок, но это моя ошибка!!!
Ещё раз большое спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.