C++: COM: Excel: Range: SetWrapText - исчезание представл-я
От: zTroj Россия  
Дата: 08.04.03 13:35
Оценка:
Обстановка: Существует объект CExcelWrap, который помогает прогеру общаться с Excel. У него есть метод:
bool CExcelWrap::SetCellsWrapedStyle(long rowBegin, long columnBegin, long rowEnd, long columnEnd, bool enable)
{
    if(m_bConnected) //флаг того что c Excel соединились
    {
        try
        {
            Range* pAllCells = new Range(m_pWorkSheet->GetCells());
            VARIANT c1 = pAllCells->GetItem(COleVariant(rowBegin),COleVariant(columnBegin));
            VARIANT c2 = pAllCells->GetItem(COleVariant(rowEnd),COleVariant(columnEnd));
            if(c1.vt == VT_DISPATCH && c2.vt == VT_DISPATCH)
            {
                Range* pf = new Range(m_pWorkSheet->GetRange(c1,c2));
                COleVariant vBool(short(enable),VT_BOOL);
                pf->SetWrapText(vBool);
            }
            delete pAllCells;
        }
        catch (COleDispatchException* e)
        {
            m_bConnected = false;
            throw e;
        }
    }
    return m_bConnected;
}

Итак, объект CExcelWrap создается, подключается к Excel, открывает пустую книгу:

bool CExcelWrap::OpenFile(const char* FileName)
{
    if(m_bConnected)
    {
        try
        {
            Workbooks Workb(m_Application->GetWorkbooks());
            Workb.Add(COleVariant(FileName ? FileName : "Книга"));
            if(m_pWorkSheet) // объект определен в классе CExcelWrap как _Worksheet
                delete m_pWorkSheet;
            m_pWorkSheet = new _Worksheet(m_Application->GetActiveSheet());
        }
        catch (COleDispatchException* e)
        {
            m_bConnected = false;
            throw e;
        }
    }
    return m_bConnected;
}


затем для определенных ячеек вызывается функция CExcelWrap::SetCellsWrapedStyle и объект отвязывается от Excel'я. Юзер сам прикрывает окошко Excel'я и объект деструктирует ( ).
Однако Excel после этого остается в памяти (причем именно при вызове SetCellsWrapedStyle!!! — в других случаях этого не происходит).

Если же в той же так сказать сессии заново запустить эту работу, то SetCellsWrapedStyle отработает вроде бы нормально... Но!!! При показе окна Excel'я там отсутствует какой-то объект отвечающий за отображение ячеек!! то есть окно екселя работает а то что внутри становится прозрачным!!

В чем проблема? Как мне правильно устанавливать свойство ячейки о автопереносе текста?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.