C++读写excel文件(三)—— 用OLE读写(by yukin_xue)

本文介绍了如何使用C++通过OLE接口来读写Excel文件,详细阐述了从添加MFC类到实现读写操作的步骤,包括解决编译错误、预加载数据等问题。示例代码展示了打开、关闭Excel文件,读取单元格数据,以及设置单元格数据的方法。
摘要由CSDN通过智能技术生成
参考博文:

http://blog.csdn.net/rekrad/article/details/7666196

http://blog.csdn.net/fullsail/article/details/8449448

http://club.topsage.com/thread-2338554-1-1.html

网上都说C++读写EXCEL文件方法很多,如:ODBC、CSpreadsheet、OLE、Sourceforge 上的几个EXCEL库...

        我试用了ODBC、CSpreadsheet二个方法,都是通过odbc数据库的方式存取excel,前者简单,几个函数解决,后者功能强大,有一个完整的类实现不同的功能,先存后取肯定没问题。但是仅读取excel文件时总是出错,我选择了放弃。

       然后又试用了OLE方法,经试验成功,就是比较繁琐一点, 其他的就没使用了。下面是OLE的使用步骤:

1.  先确保安装了microsoft的excel软件,wps是不行的哦 ~ 因为只有ms的excel软件才提供了有关的类库;

2.  选中工程,添加类→MFC→Typelib中的MFC类。

          新建一个MFC项目(ExportExcel), 建立完后点击右键,添加--类--MFC--TypeLib中的MFC类,分别从【接口】添加:_Application、_Workbook、_Worksheet、Workbooks、Worksheets到【生成的类】中,到该页面点添加如下:

                  

3. 点添加完后,注意下,找到相关头文件,注释红色那行

//#import "D:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" no_namespace

不删除则会有莫名其妙编译错误


4. 再次编译还是会有编译错误:

1>d:\work\yuanxx\exportexcel\exportexcel\crange.h(336) : warning C4003: “DialogBoxA”宏的实参不足
1>d:\work\yuanxx\exportexcel\exportexcel\crange.h(336) : error C2059: 语法错误 : “,”

将DialogBox()改成_DialogBox(),则编译成功!


5. 重要的一步添加源码:

.h文件: IllusionExcelFile.h

#pragma once  

//OLE的头文件  
#include "CRange.h"
#include "CWorkbook.h"  
#include "CWorkbooks.h"  
#include "CWorksheet.h"  
#include "CWorksheets.h"  
#include "CApplication.h"  

///  
///用于OLE的方式的EXCEL读写,  
class IllusionExcelFile  
{  

public:  

    //构造函数和析构函数  
    IllusionExcelFile();  
    virtual ~IllusionExcelFile();  

protected:  
    ///打开的EXCEL文件名称  
    CString       open_excel_file_;  

    ///EXCEL BOOK集合,(多个文件时)  
    CWorkbooks    excel_books_;   
    ///当前使用的BOOK,当前处理的文件  
    CWorkbook     excel_work_book_;   
    ///EXCEL的sheets集合  
    CWorksheets   excel_sheets_;   
    ///当前使用sheet  
    CWorksheet    excel_work_sheet_;   
    ///当前的操作区域  
    CRange        excel_current_range_;   


    ///是否已经预加载了某个sheet的数据  
    BOOL          already_preload_;  
    ///Create the SAFEARRAY from the VARIANT ret.  
    COleSafeArray ole_safe_array_;  

protected:  

    ///EXCEL的进程实例  
    static CApplication excel_application_;  
public:  

    ///  
    void ShowInExcel(BOOL bShow);  

    ///检查一个CELL是否是字符串  
    BOOL    IsCellString(long iRow, long iColumn);  

    ///检查一个CELL是否是数值  
    BOOL    IsCellInt(long iRow, long iColumn);  

    ///得到一个CELL的String  
    CString GetCellString(long iRow, long iColumn);  

    ///得到整数  
    int     GetCellInt(long iRow, long iColumn);  
    ///得到double的数据  
    double  GetCellDouble(long iRow, long iColumn);  

    ///取得行的总数  
    int GetRowCount();  
    ///取得列的总数  
    int GetColumnCount();  

    ///使用某个shet,shit,shit  
    BOOL LoadSheet(long table_index,BOOL pre_load = FALSE);  
    ///通过名称使用某个sheet,  
    BOOL LoadSheet(const char* sheet,BOOL pre_load = FALSE);  

  • 3
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值