C++处理EXCEL数据

2019.04.13-04.15  

         处理大批量Excel数据时,并且数据处理行为模式一致,考虑采用C++进行批量处理,降低工作量。在查阅相关资料后,发现用的较多的有OLE的方式,能实现基本的excel功能,完成大部分的数据处理,利用OLE加载Excel程序的前提是电脑中安装有Mircosoft office excel。具体的操作方法,需要包含Excel加载所需的头文件,可以参考网上加载相关头文件的方法,已经加载好的头文件,下载完成后,直接放在运行文件目录下即可直接使用。

一:Excel文件新建,保存

         1:添加头文件,创建数据对象

         #include <CApplication.h>
         #include <CWorkBooks.h>
         #include <CWorkBook.h>

         CApplication  m_app;    //关联启动Excel文件
         CWorkBooks    m_books;  //创建多个工作簿
         CWorkBook     m_book;   //当前工作簿

         2:关联程序,添加工作簿

        //关联调度Excel程序
        m_books.AttachDispatch(p_ExcelApp->get_Workbooks(),true);

       	COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
	 	
	    //添加新的工作簿对象,用于新建Excel文件
	    m_book = m_books.Add(cvOptional);
	    
        //保存新工作簿
	    m_book.SaveAs(COleVariant("E:\\saveexcel.xlsx"),
	    	covOptional, covOptional,covOptional,covOptional, covOptional, 0,
		covOptional, covOptional, covOptional,covOptional, covOptional);

            3:释放工作对象

            m_book.RelaeseDispatch();
            m_books.RelaeseDispatch();
            m_books.Close();
            p_app.ReleaseDispatch();
            p_app.Quit();
           

二:Excel数据读取,处理

        1:添加头文件, 创建数据对象

         #include <CApplication.h>
         #include <CWorkBooks.h>
         #include <CWorkBook.h>
         #include <CWorkSheets.h>
         #include <CWorkSheet.h>
         #include <CRange.h>

         CApplication  m_app;    //关联启动Excel文件
         CWorkBooks    m_books;  //创建多个工作簿
         CWorkBook     m_book;   //当前工作簿
         CWorkSheets   m_sheets; //工作列表
         CworkSheet    m_sheet;  //当前工作表格
         Crange        m_range;  //数据单元格

          2:关联Excel程序,打开工作簿

             

        //创建调度Excel程序
        m_app.CreateDispatch("Excel.Application",NULL);

        //关联调用工作簿
         m_books.AttachDispatch(m_app.get_WorkBooks(),true);

        //打开工作簿
         m_book = m_books.open("打开文件全路径",cvOptional,
            covOptional,covOptional,covOptional,covOptional,
			covOptional,covOptional,covOptional,covOptional,
			covOptional,covOptional,covOptional,covOptional);

       

         3:获取多个列表,打开工作表

        //关联所有工作列表
        m_sheets.AttachDispatch(m_book.get_Worksheets(),true);
         
        //打开工作列表
        m_sheet = m_sheet.get_Item(COleVariant("sheet1"));

         4:获取数据单元格,单元处理

        //获取工作范围
        m_range = m_sheet.get_UsedRange();
        
        //关联调度所有单元格
	    m_range.AttachDispatch(m_sheet.get_Cells(), true);

        //读取单个单元格
        CRange  read_cell;
      
        //关联调用相应位置的单元格,注意单元格从(1,1)开始索引
        //若是合并的单元格内容,则获取所有合并单元格的第一个,其余的为空格    
        read_cell.AttachDispatch(m_range.get_Item(COleVariant((long)3),
                                                  COleVariant((long)3)).pdispVal, 
                                                  true);
	    //取值
        COleVariant vResult = read_cell.get_Value2();
        float cell_data = vResult.dblVal;  //注意此处数据格式的转换,可在转换前添加数据类型判断

        //释放关联对象
	    read_cell.ReleaseDispatch();

              注意一点,Excel单元格是从1开始索引的,不是从0,若是从0开始索引会出现异常。

         5:释放工作对象,和创建相反过程

		    m_range.ReleaseDispatch();
		    m_sheet.ReleaseDispatch();
		    m_sheets.ReleaseDispatch();
		    m_book.ReleaseDispatch();
		    m_books.Close();
		    m_books.ReleaseDispatch();
		
		    p_ExcelApp->Quit();
		    p_ExcelApp->ReleaseDispatch();	

 

  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值