VC6.0完成讀取Excel數據的辦法。本站提示廣大學習愛好者:(VC6.0完成讀取Excel數據的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是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過程會主動停止。
彌補:本文所述法式實例完全源碼點此下載