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過程會主動停止。
彌補:本文所述法式實例完全源碼點此下載