VC操作excel

在VC中使用智能指针操作Excel。
1、工程添加excel9.h和excel9.cpp文件,或者使用导入动态库的方式
2、Excel结构:Excel属于多文档视图结构,一个应用程序包含若干个工作簿,每个工作簿包含若干个工作表
3、智能指针介绍
    _Application m_appExcel; //excel应用程序
    Workbooks    m_wBooks;  //工作簿集合
    _Workbook    m_wBook;    //单个工作簿
    Worksheets   m_wSheets;  //工作表集合
    _Worksheet   m_wSheet;   //单个工作表
  Range      m_rCells;   //单元格集合

4、初始化COM:CoInitialize(NULL);可以在应用程序cpp文件的InitInstance();函数中直接初始化
    if(S_OK != ::CoInitialize(NULL))
    {
        MessageBox(NULL,"初始化Com库失败!",NULL,MB_ICONERROR|MB_OK);
        return FALSE;
   }
   或者对其封装为函数。
  
5、释放资源
    if(m_rCells.m_lpDispatch != NULL)
    {
        m_rCells.ReleaseDispatch();
    }
    //释放工作表
    if(m_wSheet.m_lpDispatch != NULL)
    {
        m_wSheet.ReleaseDispatch();
    } 
    if(m_wSheets.m_lpDispatch != NULL)
    {
        m_wSheets.ReleaseDispatch();
    }
    //释放当前活动工作簿
    if(m_wBook.m_lpDispatch != NULL)
    {
        m_wBook.Save();
        m_wBook.ReleaseDispatch();
    }
    //关闭打开得excel文件
    if(m_wBooks.m_lpDispatch != NULL)
    {
        m_wBooks.Close();
        m_wBooks.ReleaseDispatch();
    }
    //释放excel接口
    if(m_appExcel.m_lpDispatch != NULL)
    {
        m_appExcel.Quit();
        m_appExcel.ReleaseDispatch();  
    }   
  最后释放:CoUninitialize();
5、使用方法:
    if(!m_appExcel.CreateDispatch("Excel.Application", NULL))
   {
        MessageBox("创建Excel应用程序失败!",NULL,MB_ICONERROR|MB_OK);
      return ;
   }

  //设置excel可见或者不可见
    m_appExcel.SetVisible(FALSE);

    m_wBooks = m_appExcel.GetWorkbooks();

    CComVariant varPara;
    varPara.vt    = VT_ERROR;
    varPara.scode = DISP_E_PARAMNOTFOUND;

    LPCTSTR lpFile = m_strExcelPath;

    m_wBook = m_wBooks.Open(lpFile, varPara, CComVariant(FALSE), varPara,
        varPara, varPara, varPara, varPara, varPara,
        varPara, varPara, varPara, varPara);

    /*获取Sheets集合*/
    m_wSheets = m_wBook.GetSheets();
    if(NULL == m_wSheets.m_lpDispatch)
    {
        return ;
    }

    /*Sheet总数*/
 int iSheetCount = m_wSheets.GetCount();
 
 m_wSheet = m_wSheets.GetItem(CComVariant(1));
 if(NULL == m_wSheet.m_lpDispatch)
 {
  return ;
 }
 //取得单元格集合
    m_rCells = m_wSheet.GetCells();
   
    //取得iRow, iLine指定得单元格,及其内容(iRow和iLine为参数)
    LPDISPATCH lpDispatch = m_rCells.GetItem(CComVariant(iRow), CComVariant(iLine)).pdispVal;
    rCellTable.AttachDispatch(lpDispatch);
    if(NULL == rCellTable.m_lpDispatch)
    {
        return FALSE;
    }
   
    VARIANT varCellText;
    VariantInit(&varCellText);
    varCellText = rCellTable.GetText();
    strText = varCellText.bstrVal; 
    VariantClear(&varCellText); 
    rCellTable.ReleaseDispatch();
   
  给工作表重命名:pSheet->PutName("Exp One Sheet");//如果运行有错,可以pSheet->PutName(L"Exp One Sheet")插入一个工作表,
    函数原型:_WorksheetPtr Worksheets::Add(const _variant_t &Before = vtMissing,   //在哪个工作表前插入
                      const _variant_t &After = vtMissing,   //在哪个工作表后插入
                      const _variant_t &Count = vtMissing,   //插入工组表个数
                      const _variant_t &Type = vtMissing)    //插入工作表类型有意思的是,不光这个函数,其他的有默认值的参数的默认值都是vtMissing 。

  _WorksheetPtr pSheet = pSheets->GetItem(2);
  VARIANT var;
  var.vt = VT_DISPATCH;var.pdispVal = pSheet;
  pSheets->Add();         //在第一个工作表之前插入一个空白工作表
  pSheets->Add(var);        //在pSheet工作表之前插入一个空白工作表
  pSheets->Add(vtMissing,var);   //在pSheet工作表之后插入一个空白工作表
  pSheets->Add(vtMissing,var,2);  //在pSheet工作表之后插入两个空白工作表这里仅仅涉及到_variant_t类型的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值