VC下操控excel(精典)

來源:互聯網
上載者:User
原貼地址:http://blog.csdn.net/primer_programer/archive/2008/05/09/2422118.aspx現在對Excel的操作越來越流行,可能還有對錶格的格式進行修改等複雜的操作,這裡只說明讀取Excel檔案的方法(這裡以2003為例)。 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進程會自動結束。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.