精华内容
下载资源
问答
  • 在用C++读取excel文件时,界面弹出“类Workbooks的Add方法无效”的错误。在网上查阅资料有各种说法,但没有看到有效的解决方法,而自己用的读取excel模块也是封装好的,应该不会有什么问题。 最后经过单步调试,...

    问题

    在用C++读取excel文件时,界面弹出“类Workbooks的Add方法无效”的错误。在网上查阅资料有各种说法,但没有看到有效的解决方法,而自己用的读取excel模块也是封装好的,应该不会有什么问题。

    原因

    最后经过单步调试,发现是文件目录的问题。

    原因是001.xlsx所在的文件夹data实际是在目录:

    C:\Users\kk\Documents\Visual Studio 2015\Projects\readexcel 下;

    但程序中加载的目录为:

    "C:\\Users\\kk\\Documents\\Visual Studio 2015\\Projects\\readexcel\\readexcel\\data"

    解决方法:

    将data文件夹进行调整,放置在目录:

    C:\Users\kk\Documents\Visual Studio 2015\Projects\readexcel\readexcel 下,

    或者data文件夹不动,将加载的目录更改为:

    "C:\\Users\\kk\\Documents\\Visual Studio 2015\\Projects\\readexcel\\data" 就可以了

    展开全文
  • 这是CodeProject上的一个推荐开源工程了,... 作者是基于EXCEL的文件格式进行的处理。下载下来编译发现,程序对由wps创建的excel文件不能识别,只能用于处理由office中的excel建立的文件。

    这是CodeProject上的一个推荐开源工程了,http://www.codeproject.com/KB/office/BasicExcel.aspx

    作者是基于EXCEL的文件格式进行的处理。下载下来编译发现,程序对由wps创建的excel文件不能识别,只能用于处理由office中的excel建立的文件。

    展开全文
  • [转载]C++读取Excel文件(97-2000) *.xls

    千次阅读 2009-05-10 11:23:00
    原帖在这里:http://hi.baidu.com/shaka_mabo/blog/item/5d93499b4b997ebdc8eaf436.html 谢谢这位老兄分享,我转放我空间以备后... // ReadExcel.h#ifndef __SNOWWIN_EXCEL_FILE_H__#define __SNOWWIN_EXCEL_FILE_H__

    原帖在这里:http://hi.baidu.com/shaka_mabo/blog/item/5d93499b4b997ebdc8eaf436.html

                     谢谢这位老兄分享,我转放我空间以备后需。

     

    // ReadExcel.h

    #ifndef __SNOWWIN_EXCEL_FILE_H__
    #define __SNOWWIN_EXCEL_FILE_H__

    #include <odbcinst.h>
    #include <afxdb.h>
    #include <vector>

    /// excel表中字段的类型
    enum DataType
    {
    DT_TEXT, //!< 字符串
    DT_NUMBER //!< 数值型
    };

    /// 列结构
    struct Column
    {
    CString name; //!< 列的名称
    DataType type; //!< 这一列的数据类型
    };

    /// excel文件读写类
    class ExcelFile
    {
    public:
    ExcelFile( void );
    ~ExcelFile( void );


    /// 打开文件,最先要执行这个,如果文件不存在会新建这个文件
    bool open( CString fileName );

    /// 关闭文件
    void close( void );


    //-------------创建表和对表进行删添操作-------------------
    /// 创建表,columns是表的字段定义
    bool createTable( CString tableName, std::vector<Column>* columns );

    /// 清空表
    void clearTable( CString tableName );

    /// 添加一行,eg: dataArray = " 1,'aaa','zxvcx',50 ";
    bool addRow( CString tableName, CString dataArray );
    //--------------------------------------------------------


    //---------------------进行顺序读操作---------------------
    /// 开始读取,这个函数执行后才能执行下面的其它函数
    bool beginRead( CString tableName );

    /// 把当前行移到下一行
    void moveNext( void );

    /// 读当前行的第column列的字段的数据
    void readData( short column, CString& data );

    /// 读当前行的列名为column的字段的数据
    void readData( CString column, CString& data );

    /// 是否已经读完
    bool isEOF( void );
    //--------------------------------------------------------


    //------如果对表进行比较复杂的操作,可以用下面的函数------
    /// 通过sql语句在这里对表进行插、删、改操作
    void doSQL( CString sql );

    /// 通过select语句对表进行查寻操作,通过返回的指针可以得到查寻结果
    CRecordset* select( CString selectSentence );
    //--------------------------------------------------------


    //-----------用来在list Control 控件里显示和操作的函数-----------
    /// 在一个列表框里把一个表显示出来
    bool showTable( CString tableName, CListCtrl* list );

    /// 把一个列表框里的内容保存到一个xls文件,指定每一列的名字和类型
    bool saveTable( CString fileName, CString tableName, CListCtrl* list, std::vector<Column>* columns );

    /// 把一个列表框里的内容保存到一个xls文件,指定每一列的类型
    bool saveTable( CString fileName, CString tableName, CListCtrl* list, std::vector<DataType>* types );

    /// 把一个列表框里的内容保存到一个xls文件里,全部以TEXT类型
    bool saveTableAsText( CString fileName, CString tableName, CListCtrl* list );
    //---------------------------------------------------------------

    // 取列数
    int getColCount() const;

    private:
    ///获取ODBC中Excel驱动的函数
    CString getExcelDriver( void );

    CDatabase db_;
    CRecordset * rs_;

    public:
    // 读表
    void StartRead(CString fileName, CString tableName);
    bool ReadLine(std::vector <CString> &lineText);
    void EndRead();
    private:
    };

    #endif //__SNOWWIN_EXCEL_FILE_H__

    // ReadExcel.cpp

    #include "stdafx.h"
    #include "ReadExcel.h"

    ExcelFile::ExcelFile( void ):rs_(0)
    {
    }
    ExcelFile::~ExcelFile( void )
    {
    close();
    }


    ///获取ODBC中Excel驱动的函数
    CString ExcelFile::getExcelDriver( void )
    {
    char szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    char *pszBuf = szBuf;
    CString sDriver;

    // 获取已安装驱动的名称
    if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))return "";

    do
    {
       if (strstr(pszBuf, "Excel") != 0)
       {
        sDriver = CString(pszBuf);
        break;
       }
       pszBuf = strchr(pszBuf, '/0' ) + 1;
    }
    while (pszBuf[1] != '/0' );

    return sDriver;
    }

    bool ExcelFile::open( CString fileName )
    {
    CString driver = getExcelDriver();
    if( driver.GetLength() <= 0 )return false;

    CString connect;
    connect.Format( "DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=/"%s/";DBQ=%s", driver, /*"Book1.xls"*/fileName, fileName );
    TRY
    {
       if( !db_.OpenEx( connect, CDatabase::noOdbcDialog ) )
        return false;

       rs_ = new CRecordset( &db_ );
    }
    CATCH_ALL(e)
    {
       CString buf;
       buf.Format("Excel驱动没有安装: %s!",driver);
       AfxMessageBox( buf );
       return false;
    }
    END_CATCH_ALL;
    return true;
    }

    /// 关闭文件
    void ExcelFile::close( void )
    {
    if( rs_ )
    {
       rs_->Close();
       delete rs_;
       rs_ = 0;
    }
    db_.Close();
    }


    void ExcelFile::doSQL( CString sql )
    {
    if( !rs_ )return;
    db_.ExecuteSQL( sql );
    }

    bool ExcelFile::createTable( CString tableName, std::vector<Column>* columns )
    {
    if( !rs_ )return false;
    if( columns->size() <= 0 )return false;

    CString sql;
    sql.Format( "create table %s (", tableName );

    CString buf;

    std::vector<Column>::iterator it, end = columns->end();
    for( it = columns->begin(); it != end; ++it )
    {
       buf.Format( "%s %s,", it->name, ((it->type==DT_TEXT)?"TEXT":"NUMBER") );
       sql += buf;
    }
    sql.Delete( sql.GetLength()-1, 1 );
    sql += ")";
    db_.ExecuteSQL( sql );

    return true;
    }

    void ExcelFile::clearTable( CString tableName )
    {
    CString sql;
    sql.Format( "drop table [%s$A1:IV65536]", tableName );
    db_.ExecuteSQL( sql );
    }

    bool ExcelFile::addRow( CString tableName, CString dataArray )
    {
    if( !rs_ )return false;

    CString sql;
    sql.Format( "insert into %s values( %s )", tableName, dataArray );
    db_.ExecuteSQL( sql );

    return true;
    }

    bool ExcelFile::beginRead( CString tableName )
    {
    if( !rs_ )return false;

    CString sql;
    sql.Format( "select * from [%s$A1:IV65536]", tableName );
    //sql.Format( "select * from [" & %s &"$]", tableName );
    rs_->Open( CRecordset::forwardOnly, sql, CRecordset::readOnly );

    return true;
    }

    void ExcelFile::moveNext( void )
    {
    if( !rs_ )return;
    rs_->MoveNext();
    }

    void ExcelFile::readData( short column, CString& data )
    {
    if( !rs_ )return;
    rs_->GetFieldValue( column, data );
    }
    void ExcelFile::readData( CString column, CString& data )
    {
    if( !rs_ )return;
    rs_->GetFieldValue( column, data );
    }

    bool ExcelFile::isEOF( void )
    {
    if( !rs_ )return false;
    return ( rs_->IsEOF() ? true : false );
    }

    /// 在一个列表框里把一个表显示出来
    bool ExcelFile::showTable( CString tableName, CListCtrl* list )
    {
    if( !rs_ )return false;
    if( !list )return false;

    list->DeleteAllItems();
    CHeaderCtrl* pHeader = (CHeaderCtrl*)list->GetHeaderCtrl();//>GetDlgItem(0);
    int nColumnCount = pHeader->GetItemCount();
    for( int i = 0; i < nColumnCount; ++i )
       list->DeleteColumn( 0 );

    CString buf;
    beginRead( tableName );
    int colCount = rs_->GetODBCFieldCount();
    CODBCFieldInfo fi;
    for( int i = 0; i < colCount; ++i )
    {
       rs_->GetODBCFieldInfo( (short)i, fi );
       list->InsertColumn( i, fi.m_strName, LVCFMT_LEFT, 110 );
    }

    int line = 0;

    while( !isEOF() )
    {
       line = list->GetItemCount();
       list->InsertItem( line, "空行" );
       for( int i = 0; i < colCount; ++i )
       {
        readData( i, buf );
        if( buf.GetLength() > 2 )
        {
         if( buf[buf.GetLength()-1] == '0' && buf[buf.GetLength()-2] == '.' )
          buf.Delete( buf.GetLength()-2, 2 );
        }
        list->SetItemText( line, i, buf );
       }
       moveNext();
    }
    return true;
    }


    /// 把一个列表框里的内容保存到一个xls文件
    bool ExcelFile::saveTable( CString fileName, CString tableName, CListCtrl* list, std::vector<Column>* columns )
    {
    if( !list ) return false;

    CHeaderCtrl* pHeader = (CHeaderCtrl*)list->GetHeaderCtrl();//>GetDlgItem(0);
    int colCount = pHeader->GetItemCount();

    if( columns->size() < colCount ) return false;

    ::DeleteFile( fileName );
    if( !open( fileName ) )return false;

    if( !createTable( tableName, columns ) )return false;
    CString str, buf;
    for( int i = 0; i < list->GetItemCount(); ++i )
    {
       str.Empty();
       for( int j = 0; j < colCount; ++j )
       {
        if( (*columns)[j].type == DT_TEXT )
         buf.Format( "/'%s/',", list->GetItemText( i, j ) );
        else
        {
         if( list->GetItemText( i, j ).GetLength()<= 0 )
          buf = "0,";
         else
          buf.Format( "%s,",list->GetItemText( i, j ) );
        }
        str += buf;
       }
       str.Delete( str.GetLength()-1 );
       addRow( tableName, str );
    }
    return true;
    }

    /// 把一个列表框里的内容保存到一个xls文件,指定每一列的类型
    bool ExcelFile::saveTable( CString fileName, CString tableName, CListCtrl* list, std::vector<DataType>* types )
    {
    if( !list ) return false;
    if( !types ) return false;
    CHeaderCtrl* pHeader = (CHeaderCtrl*)list->GetHeaderCtrl();//>GetDlgItem(0);
    int colCount = pHeader->GetItemCount();

    while( types->size() < colCount )types->push_back( DT_TEXT );

    std::vector< Column > v;
    Column c;

    TCHAR buff[128];
    HD_ITEM hditem;
    hditem.mask = HDI_TEXT | HDI_FORMAT;
    hditem.pszText = buff;
    hditem.cchTextMax = 128;

    for( int i = 0; i < colCount; ++i )
    {
       pHeader->GetItem( i, &hditem);
       c.name = hditem.pszText;
       c.type = (*types)[i];
       v.push_back( c );
    }

    return saveTable( fileName, tableName, list, &v );
    }


    /// 把一个列表框里的内容保存到一个xls文件里,全部以TEXT类型
    bool ExcelFile::saveTableAsText( CString fileName, CString tableName, CListCtrl* list )
    {
    if( !list ) return false;
    std::vector< Column > v;
    Column c;

    CHeaderCtrl* pHeader = (CHeaderCtrl*)list->GetHeaderCtrl();//>GetDlgItem(0);
    int colCount = pHeader->GetItemCount();

    TCHAR buff[128];
    HD_ITEM hditem;
    hditem.mask = HDI_TEXT | HDI_FORMAT;
    hditem.pszText = buff;
    hditem.cchTextMax = 128;

    for( int i = 0; i < colCount; ++i )
    {
       pHeader->GetItem( i, &hditem);
       c.name = hditem.pszText;
       c.type = DT_TEXT;
       v.push_back( c );
    }

    return saveTable( fileName, tableName, list, &v );
    }

    int ExcelFile::getColCount() const
    {
    if (rs_)
       return rs_->GetODBCFieldCount();
    else
       return 0;
    }

    void ExcelFile::StartRead(CString fileName, CString tableName)
    {
    open(fileName);
    beginRead(tableName);
    }
    bool ExcelFile::ReadLine(std::vector <CString> &lineText)
    {
    if (isEOF())
       return false;
    CString temp("");
    for (short i = 0; i < getColCount(); ++i)
    {
       readData(i, temp);
       if( temp.GetLength() > 2 )
       {
        if( temp[temp.GetLength()-1] == '0' && temp[temp.GetLength()-2] == '.' )
         temp.Delete( temp.GetLength()-2, 2 );
       }
       lineText.push_back(temp);
       temp = "";
    }
    moveNext();
    return true;
    }
    void ExcelFile::EndRead()
    {
    close();
    }

    展开全文
  • C/C++读取Excel(.xls)文件
  • c++读取excel

    2015-05-07 21:04:42
    c++读取excel文件的源代码,自己编译通过而且可以使用,代码有点多,有兴趣的可以慢慢看,功能非常强大
  • C++ 读取excel2007文件,转成lua文件 许多表格都是由excel文件写出的,程序需要读取lua的配置文件 这时就需要工具把excel表格转化成lua
  • C++读取excel表格

    万次阅读 多人点赞 2014-12-25 11:19:08
    C++读取excel文件 1 创建mfc程序(这里以vs2013为例) 2 添加读取excel文件用到的类 3 添加完成后,找到相关头文件,注释/删除 4 再次编译还是有错误 5 添加源码(最重要的一步)

                                C++读取excel文件


    1 创建mfc程序(这里以vs2013为例)

          到这里直接点击完成即可。


    2 添加读取excel文件用到的类

      2.1 打开类向导

       

       

    2.2 添加类


    _Application_Workbook_WorksheetWorkbooksWorksheets添加到“生成的类”中


    3 添加完成后,找到相关头文件,注释/删除

          #import "D:\\software\\office2010\\Office14\\EXCEL.EXE"no_namespace


    4 再次编译还是有错误

         定位错误信息,将DialogBox()改为_DialogBox()


    5 添加源码(最重要的一步)


    //Excel.h
    #pragma once
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    
    class Excel
    {
    private:
    	CString openFileName;
    	CWorkbook workBook;//当前处理文件
    	CWorkbooks books;//ExcelBook集合,多文件时使用
    	CWorksheet workSheet;//当前使用sheet
    	CWorksheets sheets;//Excel的sheet集合
    	CRange currentRange;//当前操作区域
    
    	bool isLoad;//是否已经加载了某个sheet数据
    
    	COleSafeArray safeArray;
    
    protected:
    	static CApplication application;//Excel进程实例
    
    public:
    	Excel();
    	virtual ~Excel();
    
    
    
    	void show(bool bShow);
        
    	//检查一个cell是否为字符串
    	bool isCellString(long iRow, long iColumn);
    
    	//检查一个cell是否为数值
    	bool isCellInt(long iRow, long iColumn);
    
    	//得到一个cell的string
    	CString getCellString(long iRow, long iColumn);
    
    	//得到一个cell的整数
    	int getCellInt(long iRow, long iColumn);
    
    	//得到一个cell的double数据
    	double getCellDouble(long iRow, long iColumn);
    
    	//取得行的总数
    	int getRowCount();
    
    	//取得列的整数
    	int getColumnCount();
    
    	//使用某个shell
    	bool loadSheet(long tableId, bool preLoaded = false);
    	bool loadSheet(CString sheet, bool preLoaded = false);
    
    
    	//通过序号取得某个shell的名称
    	CString getSheetName(long tableID);
    
    	//得到sheel的总数
    	int getSheetCount();
    
    
    
    
    	//打开excel文件
    	bool open(const char* fileName);
    
    	//关闭打开的excel文件
    	void close(bool ifSave = false);
    
    	//另存为一个excel文件
    	void saveAsXLSFile(const CString &xlsFile);
    
    	//取得打开文件的名称
    	CString getOpenFileName();
    
    	//取得打开sheel的名称
    	CString getOpenSheelName();
    
    	//向cell中写入一个int值
    	void setCellInt(long iRow, long iColumn,int newInt);
    
    	//向cell中写入一个字符串
    	void setCellString(long iRow, long iColumn, CString newString);
    
    
    public:
    	//初始化 Excel_OLE
    	static bool initExcel();
    
    	//释放Excel_OLE
    	static void release();
    
    	//取得列的名称
    	static char* getColumnName(long iColumn);
    
    protected:
    	void preLoadSheet();
    
    
    
    };
    
    


    //Excel.cpp
    #include "stdafx.h"
    #include <tchar.h>
    #include "Excel.h"
    
    
    COleVariant
    covTrue((short)TRUE),
    covFalse((short)FALSE),
    covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
    CApplication Excel::application;
    
    Excel::Excel() :isLoad(false)
    {
    }
    
    
    Excel::~Excel()
    {
    	//close();
    }
    
    
    bool Excel::initExcel()
    {
    	//创建Excel 2000服务器(启动Excel)   
    	if (!application.CreateDispatch(_T("Excel.application"),nullptr))
    	{
    		MessageBox(nullptr,_T("创建Excel服务失败,你可能没有安装EXCEL,请检查!"),_T("错误"),MB_OK);
    		return FALSE;
    	}
    
    	application.put_DisplayAlerts(FALSE);
    	return true;
    }
    
    
    void Excel::release()
    {
    	application.Quit();
    	application.ReleaseDispatch();
    	application = nullptr;
    }
    
    bool Excel::open(const char*  fileName)
    {
    	
    	//先关闭文件
    	close();
    
    	//利用模板建立新文档
    	books.AttachDispatch(application.get_Workbooks(), true);
    
    
    	LPDISPATCH lpDis = nullptr;
    	lpDis = books.Add(COleVariant(CString(fileName)));
    
    	if (lpDis)
    	{
    		workBook.AttachDispatch(lpDis);
    
    		sheets.AttachDispatch(workBook.get_Worksheets());
    
    		openFileName = fileName;
    		return true;
    	}
    
    	return false;
    }
    
    void Excel::close(bool ifSave)
    {
    	//如果文件已经打开,关闭文件
    	if (!openFileName.IsEmpty())
    	{
    		//如果保存,交给用户控制,让用户自己存,如果自己SAVE,会出现莫名的等待  
    		if (ifSave)
    		{
    			//show(true);
    		}
    		else
    		{
    			workBook.Close(COleVariant(short(FALSE)), COleVariant(openFileName), covOptional);
    			books.Close();
    		}
    
    		//清空打开文件名称
    		openFileName.Empty();
    	}
    
    
    	sheets.ReleaseDispatch();
    	workSheet.ReleaseDispatch();
    	currentRange.ReleaseDispatch();
    	workBook.ReleaseDispatch();
    	books.ReleaseDispatch();
    }
    
    void Excel::saveAsXLSFile(const CString &xlsFile)
    {
    	workBook.SaveAs(COleVariant(xlsFile),
    		covOptional,
    		covOptional,
    		covOptional,
    		covOptional,
    		covOptional,
    		0,
    		covOptional,
    		covOptional,
    		covOptional,
    		covOptional,
    		covOptional);
    	return;
    }
    
    
    int Excel::getSheetCount()
    {
    	return sheets.get_Count();
    }
    
    CString Excel::getSheetName(long tableID)
    {
    	CWorksheet sheet;
    	sheet.AttachDispatch(sheets.get_Item(COleVariant((long)tableID)));
    	CString name = sheet.get_Name();
    	sheet.ReleaseDispatch();
    	return name;
    }
    
    
    void Excel::preLoadSheet()
    {
    	CRange used_range;
    
    	used_range = workSheet.get_UsedRange();
    
    
    	VARIANT ret_ary = used_range.get_Value2();
    	if (!(ret_ary.vt & VT_ARRAY))
    	{
    		return;
    	}
    	//  
    	safeArray.Clear();
    	safeArray.Attach(ret_ary);
    }
    
    //按照名称加载sheet表格,也可提前加载所有表格
    bool Excel::loadSheet(long tableId, bool preLoaded)
    {
    	LPDISPATCH lpDis = nullptr;
    	currentRange.ReleaseDispatch();
    	currentRange.ReleaseDispatch();
    	lpDis = sheets.get_Item(COleVariant((long)tableId));
    	if (lpDis)
    	{
    		workSheet.AttachDispatch(lpDis, true);
    		currentRange.AttachDispatch(workSheet.get_Cells(), true);
    	}
    	else
    	{
    		return false;
    	}
    
    	isLoad = false;
    	//如果进行预先加载  
    	if (preLoaded)
    	{
    		preLoadSheet();
    		isLoad = true;
    	}
    
    	return true;
    }
    
    
    bool Excel::loadSheet(CString sheet, bool preLoaded)
    {
    	LPDISPATCH lpDis = nullptr;
    	currentRange.ReleaseDispatch();
    	currentRange.ReleaseDispatch();
    
    	lpDis = sheets.get_Item(COleVariant(sheet));
    	if (lpDis)
    	{
    		workSheet.AttachDispatch(lpDis, true);
    		currentRange.AttachDispatch(workSheet.get_Cells(), true);
    	}
    	else
    	{
    		return false;
    	}
    
    	isLoad = false;
    	//如果进行预先加载  
    	if (preLoaded)
    	{
    		preLoadSheet();
    		isLoad = true;
    	}
    
    	return true;
    }
    
    
    int Excel::getColumnCount()
    {
    	CRange range;
    	CRange usedRange;
    
    	usedRange.AttachDispatch(workSheet.get_UsedRange(), true);
    	range.AttachDispatch(usedRange.get_Columns(), true);
    	int count = range.get_Count();
    
    	usedRange.ReleaseDispatch();
    	range.ReleaseDispatch();
    
    	return count;
    }
    
    int Excel::getRowCount()
    {
    	CRange range;
    	CRange usedRange;
    
    	usedRange.AttachDispatch(workSheet.get_UsedRange(), true);
    	range.AttachDispatch(usedRange.get_Rows(), true);
    
    	int count = range.get_Count();
    
    	usedRange.ReleaseDispatch();
    	range.ReleaseDispatch();
    
    	return count;
    }
    
    bool Excel::isCellString(long iRow, long iColumn)
    {
    	CRange range;
    	range.AttachDispatch(currentRange.get_Item(COleVariant((long)iRow), COleVariant((long)iColumn)).pdispVal, true);
    	COleVariant vResult = range.get_Value2();
    	//VT_BSTR标示字符串  
    	if (vResult.vt == VT_BSTR)
    	{
    		return true;
    	}
    	return false;
    }
    
    
    bool Excel::isCellInt(long iRow, long iColumn)
    {
    
    	CRange range;
    	range.AttachDispatch(currentRange.get_Item(COleVariant((long)iRow), COleVariant((long)iColumn)).pdispVal, true);
    	COleVariant vResult = range.get_Value2();
    	//VT_BSTR标示字符串  
    	if (vResult.vt == VT_INT || vResult.vt == VT_R8)
    	{
    		return true;
    	}
    	return false;
    }
    
    CString Excel::getCellString(long iRow, long iColumn)
    {
    	COleVariant vResult;
    	CString str;
    	//字符串  
    	if (isLoad == false)
    	{
    		CRange range;
    		range.AttachDispatch(currentRange.get_Item(COleVariant((long)iRow), COleVariant((long)iColumn)).pdispVal, true);
    		vResult = range.get_Value2();
    		range.ReleaseDispatch();
    	}
    	//如果数据依据预先加载了  
    	else
    	{
    		long read_address[2];
    		VARIANT val;
    		read_address[0] = iRow;
    		read_address[1] = iColumn;
    		safeArray.GetElement(read_address, &val);
    		vResult = val;
    	}
    
    	if (vResult.vt == VT_BSTR)
    	{
    		str = vResult.bstrVal;
    	}
    	//整数  
    	else if (vResult.vt == VT_INT)
    	{
    		str.Format(_T("%d"), vResult.pintVal);
    	}
    	//8字节的数字   
    	else if (vResult.vt == VT_R8)
    	{
    		str.Format(_T("%0.0f"), vResult.dblVal);
    	}
    	//时间格式  
    	else if (vResult.vt == VT_DATE)
    	{
    		SYSTEMTIME st;
    		VariantTimeToSystemTime(vResult.date, &st);
    		CTime tm(st);
    		str = tm.Format(_T("%Y-%m-%d"));
    
    	}
    	//单元格空的  
    	else if (vResult.vt == VT_EMPTY)
    	{
    		str = "";
    	}
    
    	return str;
    }
    
    double Excel::getCellDouble(long iRow, long iColumn)
    {
    	double rtn_value = 0;
    	COleVariant vresult;
    	//字符串  
    	if (isLoad == false)
    	{
    		CRange range;
    		range.AttachDispatch(currentRange.get_Item(COleVariant((long)iRow), COleVariant((long)iColumn)).pdispVal, true);
    		vresult = range.get_Value2();
    		range.ReleaseDispatch();
    	}
    	//如果数据依据预先加载了  
    	else
    	{
    		long read_address[2];
    		VARIANT val;
    		read_address[0] = iRow;
    		read_address[1] = iColumn;
    		safeArray.GetElement(read_address, &val);
    		vresult = val;
    	}
    
    	if (vresult.vt == VT_R8)
    	{
    		rtn_value = vresult.dblVal;
    	}
    
    	return rtn_value;
    }
    
    int Excel::getCellInt(long iRow, long iColumn)
    {
    	int num;
    	COleVariant vresult;
    
    	if (isLoad == FALSE)
    	{
    		CRange range;
    		range.AttachDispatch(currentRange.get_Item(COleVariant((long)iRow), COleVariant((long)iColumn)).pdispVal, true);
    		vresult = range.get_Value2();
    		range.ReleaseDispatch();
    	}
    	else
    	{
    		long read_address[2];
    		VARIANT val;
    		read_address[0] = iRow;
    		read_address[1] = iColumn;
    		safeArray.GetElement(read_address, &val);
    		vresult = val;
    	}
    	//  
    	num = static_cast<int>(vresult.dblVal);
    
    	return num;
    }
    
    void Excel::setCellString(long iRow, long iColumn, CString newString)
    {
    	COleVariant new_value(newString);
    	CRange start_range = workSheet.get_Range(COleVariant(_T("A1")), covOptional);
    	CRange write_range = start_range.get_Offset(COleVariant((long)iRow - 1), COleVariant((long)iColumn - 1));
    	write_range.put_Value2(new_value);
    	start_range.ReleaseDispatch();
    	write_range.ReleaseDispatch();
    }
    
    void Excel::setCellInt(long iRow, long iColumn, int newInt)
    {
    	COleVariant new_value((long)newInt);
    	CRange start_range = workSheet.get_Range(COleVariant(_T("A1")), covOptional);
    	CRange write_range = start_range.get_Offset(COleVariant((long)iRow - 1), COleVariant((long)iColumn - 1));
    	write_range.put_Value2(new_value);
    	start_range.ReleaseDispatch();
    	write_range.ReleaseDispatch();
    }
    
    
    void Excel::show(bool bShow)
    {
    	application.put_Visible(bShow);
    	application.put_UserControl(bShow);
    }
    
    CString Excel::getOpenFileName()
    {
    	return openFileName;
    }
    
    CString Excel::getOpenSheelName()
    {
    	return workSheet.get_Name();
    }
    
    char* Excel::getColumnName(long iColumn)
    {
    	static char column_name[64];
    	size_t str_len = 0;
    
    	while (iColumn > 0)
    	{
    		int num_data = iColumn % 26;
    		iColumn /= 26;
    		if (num_data == 0)
    		{
    			num_data = 26;
    			iColumn--;
    		}
    		column_name[str_len] = (char)((num_data - 1) + 'A');
    		str_len++;
    	}
    	column_name[str_len] = '\0';
    	//反转  
    	_strrev(column_name);
    
    	return column_name;
    }
    

    //使用excel类
    	Excel excl;
    	bool bInit = excl.initExcel();
    	char path[MAX_PATH];
    	GetCurrentDirectoryA(MAX_PATH, path);//获取当前工作目录
    	strcat_s(path, "\\data.xlsx");//设置要打开文件的完整路径
    
    
    	bool bRet = excl.open(path);//打开excel文件
    
    	CString strSheetName = excl.getSheetName(1);//获取sheet名
    	bool bLoad = excl.loadSheet(strSheetName);//装载sheet
    	int nRow = excl.getRowCount();//获取sheet中行数
    	int nCol = excl.getColumnCount();//获取sheet中列数
    
    
    	CString cell;
    	for (int i = 1; i <= nRow; ++i)
    	{
    		for (int j = 1; j <= nCol; ++j)
    		{
    			cell = excl.getCellString(i, j);
    		}
    	}
    

    
    展开全文
  • C++读取Excel数据

    2017-04-13 18:04:53
    C++读取Excel数据
  • C++读取Excel(源代码),加载文件,添加/删除新页,添加/读取数据,保存文件C++读取Excel(源代码),加载文件,添加/删除新页,添加/读取数据,保存文件
  • C++读取excel数据

    2020-08-03 19:27:16
    读取环境为Win10+VS2015,个人参考资料封装的excel读取模块用来读取Excel2007中的数据,文件为压缩文件,亲测可用。
  • C++读取Excel,就两个文件,里面有例子,可以直接使用;
  • c++如何读取excelC++ ODBC操作excel全过程 想要通过ODBC直接读、写Excel表格文件,首先,应确保ODBC中已安装有Excel表格文件的驱动”MICROSOFT EXCEL DRIVER (*.XLS)”。然后,可根据下面步骤进行: 1. 在StdAfx.h...
  • C++读取Excel(源文件)

    热门讨论 2011-06-14 12:13:09
    C++读取Excel(源代码),加载文件,添加/删除新页,添加/读取数据,保存文件
  • VC6.0 C++读取Excel

    2015-10-11 10:36:03
    实现了在VC6.0 C++平台下,窗口选择Excel文件读取内容的功能
  • c ++如何 读取excel文件

    2021-06-25 11:24:27
    C++读取excel文件
  • C++读取 excel 完整程序源代码

    热门讨论 2012-06-28 00:13:02
    c++ 完整读取 excel 问价 xls 文件的源代码!很不错的资源!
  • C++读取Excel中的数据

    2021-06-02 15:05:24
    c++读取Excel中的数据,不太好读取(博主找了好久也没有找到好的直接读取Excel) 可以打开Excel中的数据,另存为csv类型的文件,再使用c++从csv文件中就很好读取了,下面放一个从csv中读取数据并且存放在二维数组中...
  • C++读取excel

    千次阅读 2012-04-19 21:51:12
    // ReadExcel.h #ifndef __SNOWWIN_EXCEL_FILE_H__ #define __SNOWWIN_EXCEL_FILE_H__ #include #include #include /// excel表中字段的类型 enum DataType { DT_TEXT, //! DT_NUMBER //! }; ...
  • http://blog.csdn.net/luvnn/article/details/8084581 转载于:https://www.cnblogs.com/fag888/p/5789121.html
  • VS2013 C++读取/写入EXCEL(office2010)文件,读取/写入数据操作,新人学习可用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 关于C++读取Excel表格资料后的心得

    千次阅读 2018-11-24 16:58:10
    原文:...   ...   一、读取Excel文件COM类的相关环境的搭建: 1、首先新建一个MFC对话框工程,可命名为ReadWriteExcel 2、在添加类选项中, 选择MFC From Typelib,如下图: ...
  • 如题!!!大神求源码,新手一枚,坐等消息,3Q
  • 点击蓝字关注我R读取Excel、R与本机文件以下内容是我在R语言学习过程中的每一课的重点笔记记录。16R语言读入本机文件1.每类文件都会使用对应的分隔符,例如用逗号分隔的文件为.csv文件,读取方式为:x 2.head(x) ...
  • C++读写Excel文件

    2020-03-25 17:11:35
    OpenXLSX是一套开源的读、写、创建、修改Excel文件(格式:xlsx)的C++库。附件内容:源码+示例。
  • 这里有几个效果比较强力的工具包: OpenXLSX OpenXLSX is a C++ library for reading, writing, creating and modifying Microsoft Excel® files, with the .xlsx format.
  • MFC读取excel文件

    2016-07-22 11:26:12
    读取excel文件,需要安装excel,供参考
  • 一、读取Excel文件COM类的相关环境的搭建: 1、首先新建一个MFC对话框工程,可命名为ReadWriteExcel 2、在添加类选项中, 选择MFC From Typelib,如下图: 3、再找到对应Office版本下的Excel.exe所在文件目录...
  • 用Cocos开发模型特效工具编辑器,跨Mac和windows,当中有个需求是读取并解析excel文件,但网上的查找的例子几乎都只能是在windows下面使用,再或者是命令行脚本之类的。于是,自己写了一个非常轻量级的excel解析代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,475
精华内容 3,390
关键字:

c++读取excel文件

c++ 订阅