首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Informix >

Ole与ActiveX,该如何解决

2013-01-07 
Ole与ActiveX//---------------------------------------#pragma hdrstop#include DExcelBrokerBase.h//

Ole与ActiveX
  //---------------------------------------


#pragma hdrstop

#include "DExcelBrokerBase.h"

//---------------------------------------
//构造函数
//只读、只写、读写都可以
DExcelBrokerBase::DExcelBrokerBase( const AnsiString &sFilePath, const EConType eType )
{
    switch( eType )
    {
        case EXCRead:
            s_gFileReadPath = sFilePath;
            break;
        case EXCWrite:
            s_gFileWritePath = sFilePath;
            break;
        case EXCAll:
            s_gFileReadPath = sFilePath;
            s_gFileWritePath = sFilePath;
            break;
        default:
            break;
    }
}

//---------------------------------------
//读写同时
DExcelBrokerBase::DExcelBrokerBase( const AnsiString &sFileReadPath, const AnsiString &sFileWritePath )
{
    s_gFileReadPath     = sFileReadPath;
    s_gFileWritePath    = sFileWritePath;
}


//---------------------------------------
//析构函数
DExcelBrokerBase::~DExcelBrokerBase()
{
    
    //
    if ( !v_gEReadApp.IsEmpty() )
    {
        CloseReadObj();
        v_gEReadApp    = NULL;
    }
    if ( !v_gEReadCell.IsEmpty() )
    {
        v_gEReadCell.Clear();
        v_gEReadCell        = NULL;
    }
    if ( !v_gEReadSheet.IsEmpty() )
    {
        v_gEReadSheet.Clear();
        v_gEReadSheet       = NULL;
    }

    if ( !v_gEReadSingleBook.IsEmpty() )
    {
        v_gEReadSingleBook.Clear();
        v_gEReadSingleBook  = NULL;
    }

    if ( !v_gEReadAllBooks.IsEmpty() )
    {
         v_gEReadAllBooks.Clear();
         v_gEReadAllBooks    = NULL;
    }
    
    //


    if ( !v_gEWriteApp.IsEmpty() || !v_gEWriteSingleBook.IsEmpty() )
    {
        CloseWriteObj();
        v_gEWriteSingleBook = NULL;
        v_gEWriteApp        = NULL;
    }

    if ( !v_gEWriteCell.IsEmpty() )
    {
        v_gEWriteCell.Clear();
        v_gEWriteCell       = NULL;
    }
    if ( !v_gEWriteSheet.IsEmpty() )
    {
        v_gEWriteSheet.Clear();
        v_gEWriteSheet      = NULL;
    }
    if ( !v_gEWriteAllBooks.IsEmpty() )
    {
        v_gEWriteAllBooks.Clear();
        v_gEWriteAllBooks   = NULL;
    }

}

///////////////////////////////////////////////////////////////////////////
//创建OLE对象
int DExcelBrokerBase::CreateExcReadObj()
{
    try
    {
        v_gEReadApp = CreateOleObject("Excel.Application");
    }
    catch( Exception &E )
    {
        s_gErrMsg   = " 创建OLE对象失败!";
        return EXC_CREATE_OBJ_ERR;
    }
    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//初始化读EXCEL文件对象的属性
int  DExcelBrokerBase::InitRead()
{
    int iRtn;
    iRtn    =  CreateExcReadObj();
    if( iRtn != EXC_SUCC )
    {
        return iRtn;
    }

    try
    {
        v_gEReadApp.OlePropertySet( "Visible", (Variant)false );

        v_gEReadAllBooks     = v_gEReadApp.OlePropertyGet( "Workbooks" );
        v_gEReadSingleBook   = v_gEReadAllBooks.OleFunction("Open", s_gFileReadPath.c_str() );

        v_gEReadSheet        = v_gEReadSingleBook.OlePropertyGet("ActiveSheet");                                //此行可否不要

        v_gEReadCell         = v_gEReadApp.OlePropertyGet("ActiveCell").OleFunction( "SpecialCells", 11 );

        i_gColumn            = v_gEReadCell.OlePropertyGet("Column");          //返回列


        i_gRow               = v_gEReadCell.OlePropertyGet("Row");

    }
    catch( Exception &Excp )
    {
        s_gErrMsg = "设置OLE对象属性出错!\n" + Excp.Message;

        iRtn =  CloseReadObj();
        if ( iRtn != EXC_SUCC )
        {
            return iRtn;
        }

        return EXC_INIT_ERR;
    }
    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//读表格
int  DExcelBrokerBase::ReadSingleCell( const int iRow, const int iColumn, AnsiString &sValue )
{
    int iRtn;
    try
    {
        sValue  = v_gEReadApp.OlePropertyGet("Cells", iRow, iColumn).OlePropertyGet("Value");
        if ( iColumn == 7 )             //取身份证前18位        
        {
            sValue  =   sValue.Trim();
            sValue  =   sValue.SubString( 0, 18 );
        }
    }
    catch( Exception &Ex )
    {
        s_gErrMsg   = " 读数据失败!\n" + Ex.Message;
        iRtn =  CloseReadObj();
        if ( iRtn != EXC_SUCC )
        {
            return iRtn;
        }

        return EXC_READ_CELL_ERR;
    }
    
    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//关闭读对象
int  DExcelBrokerBase::CloseReadObj()
{
    try
    {

        v_gEReadApp.OleFunction("Quit");
    }
    catch( Exception &Ex )
    {
        s_gErrMsg   = " 关闭读EXCEL对象失败!\n" + Ex.Message;
        return EXC_QUIT_ERR;
    }
    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//创建OLE写的对象
int DExcelBrokerBase::CreateExcWriteObj()
{
    try
    {


        v_gEWriteApp = CreateOleObject("Excel.Application");
    }
    catch( Exception &E )
    {
        s_gErrMsg   = " 创建OLE对象失败!\n" + E.Message;
        return EXC_CREATE_OBJ_ERR;
    }
    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//设置OLE对象属性
int  DExcelBrokerBase::InitWrite()
{
    int iRtn;

    iRtn = CreateExcWriteObj();
    if ( iRtn != EXC_SUCC )
    {
        return iRtn;
    }

    try
    {
        v_gEWriteApp.OlePropertySet("Visible", (Variant)false );
        v_gEWriteSingleBook = (v_gEWriteApp.OlePropertyGet("workbooks")).OleFunction("Add");      //为什么写时用 v_gEWriteApp
    }
    catch( Exception &E )
    {
        s_gErrMsg   = " 初始化写属性失败!" + E.Message;
        iRtn = CloseWriteObj();
        if ( iRtn != EXC_SUCC )
        {
            return iRtn;
        }
        return EXC_INIT_ERR;
    }

    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//写CELL表格
int  DExcelBrokerBase::WriteSingleCell( const int iRow, const int iColumn, AnsiString &sValue )
{
    int iRtn;
    try
    {
        v_gEWriteApp.OlePropertyGet("Cells", iRow, iColumn ).OlePropertySet("Value", sValue.c_str() );

    }
    catch( Exception &E )
    {
        s_gErrMsg   = " 写EXCLE表格失败!" + E.Message;
        iRtn = CloseWriteObj();
        if ( iRtn != EXC_SUCC )
        {
            return iRtn;
        }
        return EXC_WRITE_ERR;
    }

    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//关闭写对象
int  DExcelBrokerBase::CloseWriteObj()
{
    try
    {
        v_gEWriteSingleBook.OleFunction("SaveAs", s_gFileWritePath.c_str() );                         //需要测试


        v_gEWriteApp.OleFunction("Quit");
    }
    catch( Exception &Ex )
    {
         s_gErrMsg   = " 关闭写EXCLE对象失败!" + Ex.Message;
         return EXC_QUIT_ERR;
    }
    return EXC_SUCC;
}

///////////////////////////////////////////////////////////////////////////
//关闭读与写的对象
int  DExcelBrokerBase::CloseRWObj( EConType eType )
{
    int iRtn;
    switch( eType )
    {
        case EXCRead:
            iRtn = CloseReadObj();
            break;
        case EXCWrite:
            iRtn = CloseWriteObj();
            break;
        case EXCAll:
            iRtn = CloseReadObj();
            if ( iRtn == EXC_SUCC )
            {
                iRtn = CloseWriteObj();
            }
            break;
        default:
            break;
    }
    return iRtn;
}

///////////////////////////////////////////////////////////////////////////
//设置OLE对象属性类型
int DExcelBrokerBase::Init( EConType eType )
{
    int iRtn;
    switch( eType )
    {
        case EXCRead:
            iRtn = InitRead();
            break;
        case EXCWrite:
            iRtn = InitWrite();
            break;
        case EXCAll:
            iRtn = InitRead();
            if ( iRtn == EXC_SUCC )
            {
                iRtn = InitWrite();
            }
        default:
            break;
    }
    return iRtn;
}

///////////////////////////////////////////////////////////////////////////


#pragma package(smart_init)

当调用到: v_gEReadApp.OlePropertySet( "Visible", (Variant)false ); 时出现

    内存弹框出来!

这代码我测试程序中全部都通过了,可一加入到自己正式环境内,出问题了,网上查了一些资料与ActiveX控件相冲突,

有谁能指点指点吗??

[解决办法]
没人回答么?我遇到了同样的问题。

热点排行