时间:2021-05-20
Excel是常用的办公软件之一,本文以Excel2003为例说明VC程序读取Excel文件的方法。具体步骤如下:
1.首先要将excel类添加到工程中。
在ClassWizard中,【Add Class】,在Excel的安装目录找到Excel.exe(Microsoft2003是Excel.exe;2007应该又独立的lib库,这个没有验证),添加必要的几个类:
添加到工程中的文件是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进程会自动结束。补充:本文所述程序实例完整源码点此下载
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例采用vc6.0运行环境,通过实例实现获得MAC地址的功能。完整的实例代码如下:#include"stdafx.h"#include#include#in
VC6.0确实已经太老了VC6.0实在是很久以前的开发工具了,现在的win10已经对该软件不兼容,但是为了能使抱着怀旧情节的初学者们能像教科书或老前辈们一样使用
原型模式的实现完整代码示例(code):原型模式的实现很简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用C++实现,并在VC6.0下测试
本文以VC实例介绍了实现数据库操作的各种方法,包括打开数据库、关联记录集、读取Excel数据、执行SQL查询、创建存取字符串等,相信对于初学VC的朋友有一定的参
本文汇总了VC6.0常用的快捷键操作,熟练掌握这些快捷键操作,对于进行VC程序开发效率的提高有很大的帮助!常用快捷键详细汇总如下:1.检测程序中的括号是否匹配把