Builder 6. Проблема с TExcelApplication.
От: Аноним  
Дата: 21.08.09 09:08
Оценка:
Доброго всем времени суток!
Столкнулся с проблемой при использовании компонента TExcelApplication.
Попробую описать суть проблемы:
И так...Я использую класс ExcelExport как обертку вокруг методов компонента TExcelApplication, который реализует нужный
мне функционал експорта данных в документ MS Excel.



//Конструктор:
//---------------------------------------------------------------
ExcelExport::ExcelExport(TComponent* cOwner)
    : ExcelApplication(NULL), Worksheet(NULL)
{
    ExcelApplication = new Excel_2k::TExcelApplication(cOwner);
    Worksheet = new Excel_2k::TExcelWorksheet(cOwner);
}
//ExcelExport



//Деструктор:
//---------------------------------------------------------------
ExcelExport::~ExcelExport()
{
    if (Worksheet)
    {
        Worksheet->Disconnect();
        delete Worksheet;
        Worksheet = NULL;
    }
    if (ExcelApplication)
    {
        ExcelApplication->set_UserControl(1);
        ExcelApplication->Disconnect();
        delete ExcelApplication;
        ExcelApplication = NULL;
    }
}
//~ExcelExport()


// Вызывается для ексорта даных из результирующего набора (клас Table) в документ
//---------------------------------------------------------------
void ExcelExport::BuildTable(const Table& t)
{
 // тут происходит сам експорт....
}
//BuildTable(const Table& t)



// Вызивается для сохранения даных после того, как таблица заполнена.
//---------------------------------------------------------------
void ExcelExport::Save(const AnsiString &_FileName)
{
    Worksheet->SaveAs(TVariant(FileName));

    Worksheet->Disconnect();
    ExcelApplication->ActiveWorkbook->Close(TVariant(0));
}
// Save(const AnsiString &_FileName)


Создается екземпляр данного класса в модуле — DLL'ке в которой содержится форма, где находятся настройки експорта и которую
загружаєт основной процес приложения. Так вот суть проблемы в следующем: После закрытия основного процесса приложения (предварительно выполнив експорт) окна форм закрываются, но процесс, при этом, не завершается (отображается в Диспечере задач).

Может кто-то уже решал даную проблему и может поделится опытом?
Или подскажет, что я делаю нетак?

Заранее благодарен,
С уважением...
Re: Builder 6. Проблема с TExcelApplication.
От: vodolas  
Дата: 02.09.09 05:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Создается екземпляр данного класса в модуле — DLL'ке в которой содержится форма, где находятся настройки експорта и которую

А>загружаєт основной процес приложения. Так вот суть проблемы в следующем: После закрытия основного процесса приложения (предварительно выполнив експорт) окна форм закрываются, но процесс, при этом, не завершается (отображается в Диспечере задач).

А>Может кто-то уже решал даную проблему и может поделится опытом?

А>Или подскажет, что я делаю нетак?

А>Заранее благодарен,

А>С уважением...


Обычно для забарывания этого вариантовскую переменную, указывающую на ексель, приравнивают к нулю (в случае Делфи nill, билдер — null). Как утверждали очевидцы, нормально отпускает.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[2]: Builder 6. Проблема с TExcelApplication.
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 02.09.09 08:01
Оценка:
Здравствуйте, vodolas, Вы писали:


V>Обычно для забарывания этого вариантовскую переменную, указывающую на ексель, приравнивают к нулю (в случае Делфи nill, билдер — null). Как утверждали очевидцы, нормально отпускает.


С вариантами используют Value:=UnAssigned;
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[3]: Builder 6. Проблема с TExcelApplication.
От: silent_roach  
Дата: 02.09.09 08:32
Оценка:
Здравствуйте, DarkMaster, Вы писали:

DM>Здравствуйте, vodolas, Вы писали:


V>>Обычно для забарывания этого вариантовскую переменную, указывающую на ексель, приравнивают к нулю (в случае Делфи nill, билдер — null). Как утверждали очевидцы, нормально отпускает.


DM>С вариантами используют Value:=UnAssigned;


С офисом 2007 почему-то такое у меня не прокатывало (с ранними — получалось), я делал через VarClear(переменная) — все сработало.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.