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

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

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

以上是 VC6.0实现读取Excel数据的方法 的全部内容, 来源链接: utcz.com/z/351333.html

回到顶部