Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Ошибка при закрытии Excel из под Builder 6! (http://forum.oszone.net/showthread.php?t=106039)

SGKorotkow 30-04-2008 18:13 792265

Ошибка при закрытии 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

Busla 30-04-2008 22:51 792420

Чисто гипотетически - а после Save ждать не надо?

SGKorotkow 02-05-2008 10:00 793040

так ведь ошибка появляется сразу, не давая выполнить ни одной комманды!
кстати, ошибка одинаковая на каждой строке, если другие отулючить!

Alexej77 03-05-2008 11:36 793717

Ошибка возникает при компиляции, я так понимаю?
Приведи побольше кода. Особенно считывание и запись данных.

SGKorotkow 04-05-2008 16:23 794587

нет, компиляция проходит нормально! без ошибок!
ошибка возникает при вызове процедур для закрытия и сохранения экселевского до-та!

открытие файла:
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;
}

pva 05-05-2008 07:13 794964

у меня с экселем была какая-то проблема, она решалась просто: 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 795751

1. Откуда у тебя взялся этот файл c:\bcb\emuvcl\ulilcls.h? В моем BCB6 его нет, и папки emuvcl нет.
2. Твой код у меня работате нормально.
3. try/catch, думаю, лишнее.

Давай больше кода.

SGKorotkow 06-05-2008 10:06 795885

не знаю почему система выдаёт этот адрес, на самом деле адрес следующий:
\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-