设为首页收藏本站

中国膜结构网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

膜结构车棚
膜结构车棚膜结构资质国产膜材 膜结构网中国膜结构协会
查看: 106|回复: 0

VC操作EXCEL

[复制链接]
  • TA的每日心情
    开心
    2021-6-20 09:04
  • 签到天数: 1540 天

    [LV.Master]伴坛终老

    发表于 2021-4-13 21:00 | 显示全部楼层 |阅读模式
    VC提供了操作EXCEL的COM。这个接口是统一的。安装了EXCEL就可以通过OFFICE自带的接口使用

    先要了解EXCEL中的几个概念:BOOK、SHEET、CELL

    1.        首先要将excel类添加到工程中。
    在ClassWizard中,【Add Class】,在Excel的安装目录找到Excel.exe(Microsoft2003,2007都是Excel.exe),添加必要的几个类:
    // Excel应用对象
    _Application   m_oExcelApp;              // Excel程序
    _Worksheet            m_oWorkSheet;     // 工作表
    _Workbook            m_oWorkBook;      // 工作簿
    Workbooks            m_oWorkBooks;    // 工作簿集合
    Worksheets            m_oWorkSheets;    // 工作表集合
    Range                   m_oCurrRange;      // 使用区域
    添加到工程中的文件是excel.h和excel.cpp。
    2.        初始化Com库
    if (CoInitialize(NULL)!=0)
    {
            AfxMessageBox("初始化COM支持库失败!");
            exit(1);
    }
    3.        读取文件中的数据
           if (!m_oExcelApp.CreateDispatch( _T( "Excel.Application" ), NULL ) )
           {
                  ::MessageBox( NULL, _T( "创建Excel服务失败!" ), _T( "错误提示!" ), MB_OK | MB_ICONERROR);
                  exit(1);
           }
          
           //设置为显示
           m_oExcelApp.SetVisible(FALSE);
           m_oWorkBooks.AttachDispatch( m_oExcelApp.GetWorkbooks(), TRUE ); //没有这条语句,下面打开文件返回失败。
          
           LPDISPATCH lpDisp = NULL;
           COleVariant covTrue((short)TRUE);
        COleVariant covFalse((short)FALSE);
        COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
           Range            oCurCell;

           // 打开文件
           lpDisp = m_oWorkBooks.Open( strFilePath,
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing),
                                          _variant_t(vtMissing) );
           // 获得活动的WorkBook( 工作簿 )
           m_oWorkBook.AttachDispatch( lpDisp, TRUE );
           // 获得活动的WorkSheet( 工作表 )
           m_oWorkSheet.AttachDispatch( m_oWorkBook.GetActiveSheet(), TRUE );
           // 获得使用的区域Range( 区域 )
           m_oCurrRange.AttachDispatch( m_oWorkSheet.GetUsedRange(), TRUE );

           // 获得使用的行数
           long lgUsedRowNum = 0;
           m_oCurrRange.AttachDispatch( m_oCurrRange.GetRows(), TRUE );
           lgUsedRowNum = m_oCurrRange.GetCount();
           // 获得使用的列数
           long lgUsedColumnNum = 0;
           m_oCurrRange.AttachDispatch( m_oCurrRange.GetColumns(), TRUE );
           lgUsedColumnNum = m_oCurrRange.GetCount();
           // 读取Sheet的名称
           CString strSheetName = m_oWorkSheet.GetName();

           //得到全部Cells,此时,CurrRange是cells的集合
           m_oCurrRange.AttachDispatch( m_oWorkSheet.GetCells(), TRUE );

           // 遍历整个Excel表格
           CStringArray* arrayStr;
           arrayStr = new CStringArray[lgUsedRowNum];
           for ( int i = 0; i < lgUsedRowNum; )
           {
                  for ( int j = 1; j <= lgUsedColumnNum; )
                  {
                         oCurCell.AttachDispatch( m_oCurrRange.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)j ) ).pdispVal, TRUE );
                         VARIANT varItemName = oCurCell.GetText();
                         CString strItemName;
                         strItemName = varItemName.bstrVal;
    //                  AfxMessageBox( strItemName );
                         // 判断是否是合并的单元格
                         VARIANT varMerge = oCurCell.GetMergeCells();
                         if ( varMerge.boolVal == -1 )
                         {
    //                         AfxMessageBox( _T( "是合并的单元格!" ) );
                         }
                         else if ( varMerge.boolVal == 0 )
                         {
    //                         AfxMessageBox( _T( "不是合并的单元格!" ) );
                         }

                         arrayStr[i].Add( strItemName );
                         j++;
                  }
                  i++;
           }
          
           // 更新列表控件数据
           m_pExcelOperDlg->initListCtrlColumn( lgUsedColumnNum );
           m_pExcelOperDlg->updateListCtrlData( arrayStr, lgUsedRowNum );

           // 释放二维数组
           delete[] arrayStr;

           // 关闭
           m_oWorkBook.Close( covOptional, COleVariant( strFilePath ), covOptional );
           m_oWorkBooks.Close();
           // 释放
           m_oCurrRange.ReleaseDispatch();
           m_oWorkSheet.ReleaseDispatch();
           m_oWorkSheets.ReleaseDispatch();
           m_oWorkBook.ReleaseDispatch();
           m_oWorkBooks.ReleaseDispatch();
           m_oExcelApp.ReleaseDispatch();
           m_oExcelApp.Quit();    // 这条语句是推出Excel程序,任务管理器中的EXCEL进程会自动结束。
    回复


    http://www.mjgw.org/ 专业从事膜结构设计、制作加工、施工安装的膜结构工程服务,能够为客户提供专业的膜结构整体解决方案。做中国最好的膜结构综合服务平台。欢迎大家联系电话:198-7840-1958,QQ:463017170.
    相关关键词:膜结构车棚,膜结构车棚覆盖,膜结构车棚公司,膜结构车棚多少钱,膜结构车棚厂家,膜结构车棚价格,社区膜结构车棚,膜结构车棚膜布厂家 ,膜结构车棚哪家好,膜结构车棚多少钱一米,膜结构车棚报价,膜结构车棚哪里有,膜结构车棚定制,膜结构车棚安装,膜结构车棚设计,膜结构车棚电话,膜结构车棚加工,膜结构车棚膜布价格,膜结构车棚批发,膜结构车棚制造商,膜结构车棚生产厂家,膜结构车棚设计,膜结构车棚施工,膜结构车棚多少钱一平米,膜结构车棚订制,张拉膜车棚,张拉膜车棚覆盖,张拉膜车棚公司,张拉膜车棚多少钱,张拉膜车棚厂家,张拉膜车棚价格,社区张拉膜车棚,张拉膜车棚膜布厂家 ,张拉膜车棚哪家好,张拉膜车棚多少钱一米,张拉膜车棚报价,张拉膜车棚哪里有,张拉膜车棚定制,张拉膜车棚安装,张拉膜车棚设计,张拉膜车棚电话,张拉膜车棚加工,张拉膜车棚膜布价格,张拉膜车棚批发,张拉膜车棚制造商,张拉膜车棚生产厂家,张拉膜车棚设计,张拉膜车棚施工,张拉膜车棚多少钱一平米,张拉膜车棚订制,常用膜材品牌:德国杜肯、法国法拉利、德国海德斯、德国米乐、日本平岗、韩国秀博、比利时希运、美国赫虏伯、中国科宝、上海慧遥。

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    推荐膜材品牌上一条 /6 下一条

    进口膜材 国产膜材 pvdf膜材ptfe膜材ETFE膜材
    最好的膜结构公司 一级膜结构资质 膜结构一级资质
    膜结构设计-膜结构十大品牌-etfe设计-充气膜结构
    诺科膜结构
    遨都膜结构设计
    中国膜结构网
    中国空间膜结构

    QQ|申请友链|手机版|中国膜结构论坛