VC6.0实现读取Excel数据的方法

所属分类: 软件编程 / C 语言 阅读数: 69
收藏 0 赞 0 分享

Excel是常用的办公软件之一,本文以Excel2003为例说明VC程序读取Excel文件的方法。具体步骤如下:
 
1.首先要将excel类添加到工程中。

在ClassWizard中,【Add Class】,在Excel的安装目录找到Excel.exe(Microsoft2003是Excel.exe;2007应该又独立的lib库,这个没有验证),添加必要的几个类:

// 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进程会自动结束。

补充:本文所述程序实例完整源码点此下载

更多精彩内容其他人还在看

利用C语言来求最大连续子序列乘积的方法

这篇文章主要介绍了利用C语言来求最大连续子序列乘积的方法,基本的思路以外文中还附有相关ACM题目,需要的朋友可以参考下
收藏 0 赞 0 分享

用C语言判断一个二叉树是否为另一个的子结构

这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现的阶乘,排列和组合实例

这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言查找数组里数字重复次数的方法

这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言简单实现计算字符个数的方法

这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

c实现linux下的数据库备份

本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

C++获得文件状态信息的方法

这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言按关键字搜索文件夹中文件的方法

这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言之字符串模糊查询方法的实现

本篇文章主要为大家介绍字符串模糊查询的C语言程序编写方法,有需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现BMP转换JPG的方法

这篇文章主要介绍了C语言实现BMP转换JPG的方法,涉及C#图片格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多