日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 操作Excel

發布時間:2023/12/8 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 操作Excel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

預期實現結果:

C++可對Excel表精確進行某一行某一列的增加、修改、刪除、查詢數據

預演環境:

Window7+VS2013+office2013(32位)、2010(64位)、2007(64位)2003(64位)+WPS2016(位)

預演方法:

1、 ODBC方式訪問

2、 通過解析Excel表格文件

3、 通過OLE/COM方式訪問

可行性分析:

2003版本office辦公軟件創建Excel表的后綴.xls 而以后的高版本創建表后綴為.xlsx。是用新的基于XML的壓縮文件格式取代了其目前專有的默認文件格式,在傳統的文件名擴展名后面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等),使其占用空間更小,可以向下兼容xls。

這樣造成以前通過ODBC方式訪問和通過解析Excel表格文件的方法代表無法解析高版本的xlsx文件,因此選擇OLE/COM方式訪問可以一勞永逸的解決所有的版本問題。**

OLE/COM方式訪問步驟:

1. 新建MFC工程

2. 配置工程,添加組件類接口

導入OLE/COM組件的接口的步驟為:項目->類向導->添加類->類型庫中的MFC類,先選擇要導入的組件所在的路徑,即Excel.exe所在的路徑。導入接口中所用到類方法接口如下圖所示:


3. 將各個導入的頭文件“#import “C:\Program Files\Microsoft Office\Office12\EXCEL.EXE” no_namespace中部分注釋掉。在:#include <、afxdisp.h>加入上面7個頭文件文件

4.代碼實現

  • 在對話框Dlg.h定義接口變量

    CApplication app; CWorkbook book;CWorkbooks books; CWorksheet sheet; CWorksheets sheets; CRange range; CRange cols; LPDISPATCH lpDisp;
  • 對話框中拖拽兩個按鈕,分別命名為導入和導出

  • 實現導入導出的功能

    導入:

    void CCpp_ExcleDemoDlg::OnBnClickedButton1(){COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if (!app.CreateDispatch(_T("Excel.Application"))) {this->MessageBox(_T("無法創建Excel應用!")); }books = app.get_Workbooks();//打開Excel,其中pathname為Excel表的路徑名 lpDisp = books.Open(_T("D:\\工作簿1.xlsx"), covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional);book.AttachDispatch(lpDisp);sheets = book.get_Worksheets();sheet = sheets.get_Item(COleVariant((short)1));//獲得坐標為(A,1)的單元格 range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("A1")));//獲得單元格的內容 COleVariant rValue;rValue = COleVariant(range.get_Value2());//轉換成寬字符 rValue.ChangeType(VT_BSTR);//轉換格式,并輸出 this->MessageBox(CString(rValue.bstrVal));book.put_Saved(TRUE);app.Quit(); }
  • 導出:

    void CCpp_ExcleDemoDlg::OnBnClickedButton2(){COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);if (!app.CreateDispatch(_T("Excel.Application"))){this->MessageBox(_T("無法創建Excel應用!"));}books = app.get_Workbooks();//打開Excel,其中pathname為Excel表的路徑名 book = books.Add(covOptional);sheets = book.get_Worksheets();sheet = sheets.get_Item(COleVariant((short)1)); //獲得坐標為(A,1)和(B,1)的兩個單元格 range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("B1"))); //設置單元格類容為Hello Excerange.put_Value2(COleVariant(_T("Clear Excel Demo"))); //選擇整列,并設置寬度為自適應 cols = range.get_EntireColumn();cols.AutoFit();//獲得坐標為(C,2)單元格 range = sheet.get_Range(COleVariant(_T("C2")), COleVariant(_T("C2")));//設置公式“=RAND()*100000”range.put_Formula(COleVariant(_T("=RAND()*100000")));//設置數字格式為貨幣型 range.put_NumberFormat(COleVariant(_T("$0.00")));//選擇整列,并設置寬度為自適應 cols = range.get_EntireColumn();cols.AutoFit();//顯示Excel表app.put_Visible(TRUE);app.put_UserControl(TRUE);}

    Demo代碼功能概述:

    Demo實現對某一行某一列數據進行讀取、準確輸入某一行某一列

    OLE/COM方式編程注意事項

    有錯誤error C2059雙擊error C2059,將VARIANT DialogBox()改成VARIANT _DialogBox()再次編譯,則可以通過

    附上Demo的下載地址http://download.csdn.net/detail/it_ds/9762897

    總結

    以上是生活随笔為你收集整理的C++ 操作Excel的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。