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

Ole与ActiveX解决方案

2012-02-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控件相冲突,

有谁能指点指点吗??


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

热点排行