MFC向Excel讀寫數據詳細方法_第1頁
MFC向Excel讀寫數據詳細方法_第2頁
MFC向Excel讀寫數據詳細方法_第3頁
MFC向Excel讀寫數據詳細方法_第4頁
MFC向Excel讀寫數據詳細方法_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、MFC讀寫Excel詳細步驟準備工作:打開開發環境VC或VS新建一個基于對話框的簡單工程;通過類向導添加類->類型庫中的MFC類 打開創建類對話框選擇文件,位置編輯框填入Excel.exe的詳細目錄,可以通過瀏覽選擇,在接口下方選擇_Application(應用), _Workbook(視窗),Workbooks(整個視窗),Worksheets(單個表單),Worksheets(整個表單),Range(元素集合)六個基本的接口并生成類。選擇接口后單擊向右的單箭頭即可,雙箭頭是生成所有接口的類;生成類之后將添加的幾個類的頭文件中的#import "E:Microsoft Off

2、iceOffice14EXCEL.EXE" no_namespace注釋掉,加上#include<afxdisp.h>。然后編譯,出現下面這倆個錯誤;點擊DialodBoxA找到錯誤位置將DialodBox改為_DialodBox;再編譯,沒有錯誤;warning C4003: “DialogBoxA”宏的實參不足error C2059: 語法錯誤:“,”在要操作Excel類的CPP文件中包含頭文件:準備工作完成。向Excel寫數據:CFileDialog dlg(FALSE, ".xlsx",NULL, OFN_FILEMUSTEXIST|OFN_H

3、IDEREADONLY|OFN_OVERWRITEPROMPT,"Microsoft Excel Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)(推薦)|*.xlsx|All Files (*.*)|*.*|");dlg.m_ofn.lpstrTitle ="保存到Excel"if (dlg.DoModal() = IDOK)/獲取路徑 CString strFileName=dlg.GetPathName();CWorkbooks books;CWorkbook book;CApplication ap

4、p;CWorksheets sheets;CWorksheet sheet;CRange range;CMyFont font;CRange cols;COleVariant covOptional(long)DISP_E_PARAMNOTFOUND,VT_ERROR);if (!app.CreateDispatch("Excel.Application")this->MessageBox("無法創建Excel應用!");return;books=app.get_Workbooks();book=books.Add(covOptional);she

5、ets=book.get_Worksheets();sheet=sheets.get_Item(COleVariant(short)1);/獲得(A,1)(B,1)兩個單元格range=sheet.get_Range(COleVariant("A1"),COleVariant("B6");/設置公式“=RAND()*100000”range.put_Formula(COleVariant("=RAND()*1000");/選擇整列,并設置寬度為自適應cols = range.get_EntireColumn(); cols.AutoF

6、it();/設置字體為粗體font = range.get_Font();font.put_Bold(COleVariant(short)TRUE);/設置數字格式為貨幣型/range.put_NumberFormat(COleVariant("$0.00");CString Range327="C1","C2","C3","C4","C5","C6"CString fileinfo="齒形","齒向","

7、齒距","左齒面","右齒面","徑跳"for(int i=0;i<6;i+)range = sheet.get_Range(COleVariant(Range327i), COleVariant(Range327i);range.put_Value2(COleVariant(fileinfoi);/*/獲得坐標為(C,2)單元格 /顯示Excel表range = sheet.get_Range(COleVariant("C1"), COleVariant("F10");/設置單

8、元格內容位Hello Excelrange.put_Value2(COleVariant("哈爾濱精達測量儀器有限公司");*/選擇整列,并設置寬度為自適應cols = range.get_EntireColumn(); cols.AutoFit(); /顯示列表控件/app.put_Visible(TRUE);/允許其他用戶控制Excel,否則Excel、將一閃而過/app.put_UserControl(TRUE); book.SaveCopyAs(COleVariant(strFileName); book.put_Saved(true); range.Release

9、Dispatch();font.ReleaseDispatch();cols.ReleaseDispatch();sheet.ReleaseDispatch();sheets.ReleaseDispatch();book.ReleaseDispatch();books.ReleaseDispatch();/以下關閉應用的兩條代碼結合使用且順序不能反,否則無法關閉進程app.Quit();app.ReleaseDispatch();讀取Excel中的數據:UpdateData(TRUE);str327=""UpdateData(FALSE);CApplication app;

10、 CWorkbooks books;CWorkbook book;CWorksheets sheets; CWorksheet sheet; CRange range;CRange oCurCell;CString strFileName1;CFileDialog dlg(TRUE, ".xlsx",NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Microsoft Excel Files(*.xls)|*.xls|Microsoft Excel Files(*.xlsx)|*.xlsx|

11、All Files (*.*)|*.*|");dlg.m_ofn.lpstrTitle = "打開Excel文件" ;int nRetVal = dlg.DoModal();if ( nRetVal = IDOK )if (!app.CreateDispatch( _T( "Excel.Application" ), NULL ) ) :MessageBox( NULL, _T( "創建Excel服務失敗!" ), _T( "錯誤提示!" ), MB_OK | MB_ICONERROR); return;

12、/exit(1); /設置為顯示app.put_Visible(FALSE);books.AttachDispatch( app.get_Workbooks(), TRUE );LPDISPATCH lpDisp = NULL;COleVariant covTrue(short)TRUE);COleVariant covFalse(short)FALSE);COleVariant covOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR); / 打開文件CString strFilePath=dlg.GetPathName();strFileName1=s

13、trFilePath;/CString strFilePath="G:研發人員名單2016.xls"lpDisp = books.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),

14、 _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing), _variant_t(vtMissing) );/ 獲得活動的WorkBook( 工作簿 )book.AttachDispatch( lpDisp, TRUE );/ 獲得活動的WorkSheet( 工作表 )sheet.AttachDispatch( book.get_ActiveSheet(), TRUE );/ 獲得使用的區域Range( 區域 )range.AttachDispatch( sheet.g

15、et_UsedRange(), TRUE );/ 獲得使用的行數long lgUsedRowNum = 0;range.AttachDispatch( range.get_Rows(), TRUE );lgUsedRowNum = range.get_Count();/ 獲得使用的列數long lgUsedColumnNum = 0;range.AttachDispatch( range.get_Columns(), TRUE );lgUsedColumnNum = range.get_Count();/ 讀取Sheet的名稱CString strSheetName = sheet.get_N

16、ame();/得到全部Cells,此時,CurrRange是cells的集合 range.AttachDispatch( sheet.get_Cells(), TRUE ); / 遍歷整個Excel表格CStringArray* arrayStr;arrayStr = new CStringArraylgUsedRowNum;for ( int i = 0; i < lgUsedRowNum; )/遍歷行for ( int j = 1; j <= lgUsedColumnNum; )/遍歷列oCurCell.AttachDispatch( range.get_Item( COleV

17、ariant( (long)(i + 1), COleVariant( (long)j ) ).pdispVal, TRUE );VARIANT varItemName = oCurCell.get_Text();CString strItemName;strItemName = varItemName.bstrVal;/ AfxMessageBox( strItemName );/ 判斷是否是合并的單元格VARIANT varMerge = oCurCell.get_MergeCells();CString PosInfo1="A","B","

18、;C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"CString PosInfo2="1","2","3&q

19、uot;,"4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"if ( varMerge.boolVal = -1 )AfxMessageBox( PosI

20、nfo1j-1+PosInfo2i+"是合并的單元格!" );/else if ( varMerge.boolVal = 0 )/AfxMessageBox( _T( "不是合并的單元格!" ) );/arrayStri.Add( strItemName );j+;i+;if(lgUsedColumnNum*lgUsedRowNum>=300)MessageBox("文件過大,存儲空間不足,無法讀取!");goto LLL;CString strTempValue2020;for ( int i = 0; i < lgUs

21、edColumnNum; i+)/遍歷列for (int j = 0; j < lgUsedRowNum; j+)/遍歷行strTempValueij=arrayStrj.GetAt(i);/ 釋放二維數組delete arrayStr;/*/這里設置了字符串類型,應該還能設置其它類型參數,比如說整型。解開上面代碼中的注釋,可以嘗試下其它功能。參考資源1/釋放資源/book.SaveCopyAs(COleVariant(strFilePath);/book.put_Saved(true);book.ReleaseDispatch(); books.ReleaseDispatch(); app.Quit();app.ReleaseDispatch();long size327=lgUsedColumnN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論