程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> VC6.0完成讀取Excel數據的辦法

VC6.0完成讀取Excel數據的辦法

編輯:關於C++

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過程會主動停止。

彌補:本文所述法式實例完全源碼點此下載

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved