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
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C++处理Excel文件数据,可以使用第三方库来实现,如LibXL、ExcelFormat等。这些库提供了一些API来读取和写入Excel文件。 下面是一个使用LibXL库的示例代码来读取Excel文件数据: ```cpp #include <iostream> #include "libxl.h" int main() { libxl::Book* book = xlCreateBook(); // 创建一个新的Excel文件 if (book) { if (book->load("example.xlsx")) { // 打开要读取的Excel文件 libxl::Sheet* sheet = book->getSheet(0); // 获取第一个工作表 if (sheet) { int rowCount = sheet->lastRow(); // 获取行数 int colCount = sheet->lastCol(); // 获取列数 for (int row = 0; row <= rowCount; ++row) { for (int col = 0; col <= colCount; ++col) { libxl::CellType cellType = sheet->cellType(row, col); // 获取单元格类型 if (cellType == libxl::CELLTYPE_NUMBER) { double value = sheet->readNum(row, col); // 读取数值类型单元格的值 std::cout << value << " "; } else if (cellType == libxl::CELLTYPE_STRING) { const char* value = sheet->readStr(row, col); // 读取字符串类型单元格的值 std::cout << value << " "; } else { std::cout << " "; } } std::cout << std::endl; } } } book->release(); // 释放资源 } return 0; } ``` 这段代码使用LibXL库打开名为"example.xlsx"的Excel文件,并逐行逐列地读取单元格的值,输出到控制台。 请注意,您需要先下载并安装LibXL库,并在编译过程中链接对应的库文件。另外,您需要根据实际情况修改代码以适应您的Excel文件结构和数据类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值