使用MFC操作EXCEL檔案
一、載入
1、 在VC6.0裡建立一個MFC工程
2、開啟MFCClassWizard視窗(檢視—>建立類嚮導),選擇Automation,單擊AddClass按鈕,選擇Froma type library...,彈出檔案選擇對話方塊,之後定位到C:\Program Files\MicrosoftOffice\OFFICE11\EXCEL.EXE,在生成類中新增所有的物件(其實新增需要的即可,為了簡便,不出錯保留了冗餘),如下圖。
3、返回編輯器,檢視工程檔案,可發現多了EXCEL.9H及EXCEL9.CPP兩個檔案,拷貝出來,放在VS2005
4. 開啟stdafx.h標頭檔案確保包含如下標頭檔案:
#include <afxdisp.h>(這個一般有了)
#include "excel.h" (手動新增這個即可)
5. 開啟TestExcel.cpp檔案,修改CTestExcelApp::InitInstance(),加入如下程式碼:
if(!AfxOleInit() ){
AfxMessageBox("初始化Ole出錯!");
return FALSE;
}
為保證編譯時不產生重複定義錯誤(可以驗證一下是否成功載入,沒有也能正常執行),我編譯時出現了很多“類重複定義”異常,開啟excel.h檔案,在檔案開始位置加入如下程式碼:
#if !defined _HEAD_FILE_EXCEL9_
#define _HEAD_FILE_EXCEL9_
相應的,在檔案末尾加入:
#endif
成功
Excel介面 |
匯入類 |
標頭檔案 |
說明 |
_Application |
CApplicaton |
Application.h |
Excel應用程式。 |
Workbooks |
CWorkbooks |
Workbooks.h |
工作簿的容器,裡面包括了 |
_Workbook |
CWorkbook |
Workbook.h |
單個工作簿。 |
Worksheets |
CWorksheets |
Worksheets.h |
單個工作簿中的Sheet表格的容器,包括該工作簿中的所有Sheet。 |
_Worksheet |
CWorksheet |
Worksheet.h |
單個Sheet表格。 |
Range |
CRange |
Range.h |
一定數量的單元格,可對單元格進行單個或多個單元格進行操作。 |
二、操作EXCEL檔案
1. 新建一個excel表,並填充兩個單元格的例項
- void CTestExcelDlg::OnButton1()
- {
- //Workbooks—>Workbook —>Worksheets—>Worksheet —>Range
- _Application app; //Excel應用程式介面
- Workbooks books; //工作薄集合
- _Workbook book; //工作薄
- Worksheets sheets; //工作表集合
- _Worksheet sheet; //工作表
- Range range; //Excel中針對單元格的操作都應先獲取其對應的Range物件
- Font font;
- Range cols;
- /*
- COleVariant類為VARIANT資料型別的包裝,在自動化程式中,通常都使用
- VARIANT資料型別進行引數傳遞。故下列程式中,函式引數都是通過COleVariant
- 類來轉換了的。
- */
- //covOptional 可選引數的VARIANT型別
- COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
- if( !app.CreateDispatch("Excel.Application") ){
- this->MessageBox("無法建立Excel應用!");
- return;
- }
- //獲取工作薄集合
- books=app.GetWorkbooks();
- //新增一個工作薄
- book=books.Add(covOptional);
- //獲取工作表集合
- sheets=book.GetSheets();
- //獲取第一個工作表
- sheet=sheets.GetItem(COleVariant((short)1));
- //選擇工作表中A1:A1單元格區域
- range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
- //設定A1=HELLO EXCEL!"
- range.SetValue(COleVariant("HELLO EXCEL!"));
- //調整格式,設定粗體
- font=range.GetFont();
- font.SetBold(COleVariant((short)TRUE));
- //選擇A2單元格,插入一個公式"=RAND()*100000",並設定A2數字格式為貨幣形
- 式
- range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));
- range.SetFormula(COleVariant("=RAND()*100000"));
- range.SetNumberFormat(COleVariant("$0.00"));
- //選擇A:A列,設定寬度為自動適應
- cols=range.GetEntireColumn();
- cols.AutoFit();
- //顯示Excel表格,並設定狀態為使用者可控制
- app.SetVisible(TRUE);
- app.SetUserControl(TRUE);
2. 開啟一個已有的excel表格例項
- CString strPath;
- strPath += "C:\\template.xlt"; // 模板的路徑
- CFileFind filefind;
- if( !filefind.FindFile( strPath ) )
- {
- AfxMessageBox( "沒有找到模版文件,請其查詢" );
- return;
- }
- LPDISPATCH lpDisp; //介面指標
- books=app.GetWorkbooks();
- lpDisp = books.Open(m_filepath,
- covOptional, covOptional, covOptional, covOptional,
- covOptional, covOptional, covOptional, covOptional,
- covOptional, covOptional, covOptional, covOptional,
- covOptional, covOptional
- ); //與的不同,是個引數的,直接在後面加了兩個covOptional成功了
- book.AttachDispatch(lpDisp);
3. 儲存一個excel檔案例項
- book.SetSaved(TRUE);
4. 另存一個excel檔案例項
- book.SaveAs(COleVariant(m_filename),covOptional,
- covOptional,covOptional,
- covOptional,covOptional,(long)0,
- covOptional,covOptional,covOptional,
- covOptional,covOptional); //與的不同,是個引數的,直接在後面加了兩個covOptional成功了
5. 釋放一個excel檔案例項
經試驗證實,不釋放第二次使用excel時會中斷,放在類的析構裡面有時呼叫不到,主動呼叫最保險。(有沒有AttachDispatch()過都要釋放,否則報錯)
- //釋放物件(相當重要!)
- Rang.ReleaseDispatch();
- sheet.ReleaseDispatch();
- sheets.ReleaseDispatch();
- book.ReleaseDispatch();
- books.ReleaseDispatch();
- //退出程式
- app.Quit();
- //m_ExlApp一定要釋放,否則程式結束後還會有一個Excel程序駐留在記憶體中,而且程式重複執行的時候會出錯
- app.ReleaseDispatch();
6. 修改一個excel單元格
- range=sheet.GetRange(COleVariant(IndexToString(row,col)),COleVariant(IndexToString(row,col)));
- range.SetValue2(COleVariant(value));
7. 取出一個excel單元格
實現Variant資料型別轉換為CString類,這個只是一個示例,轉換較為簡單。
- range=sheet.GetRange(COleVariant(IndexToString(row,col)),COleVariant(IndexToString(row,col)));
- COleVariant rValue;
- rValue=COleVariant(range.GetValue2());
- rValue.ChangeType(VT_BSTR);
- return CString(rValue.bstrVal);
8. 還有釋放問題是最重要的問題:
首先變數必須全釋放,無論當初是否繫結過;
其次,程式釋放和程式關閉的順序必須是
- app.Quit();
- app.ReleaseDispatch();
- 如果順如顛倒如下:
- app.ReleaseDispatch();
- app.Quit();
- 出現的後果是程式關閉後,excel程序仍然執行,所以無法正常開啟程式曾經開啟excel表格。
附錄(操作類原始碼):
- #include "../Stdafx.h"
-
相關推薦
使用MFC操作EXCEL檔案
一、載入 1、 在VC6.0裡建立一個MFC工程 2、開啟MFCClassWizard視窗(檢視—>建立類嚮導),選擇Automation,單擊AddClass按鈕,選擇Froma type library...,彈出檔案選擇對話方塊,之後定位到C:
POI 操作 EXCEL檔案(匯入、匯出)
1.1概述 開發中經常會設計到excel的處理,如匯出Excel,匯入Excel到資料庫中,操作Excel目前有兩個框架,一個是apache 的poi, 另一個是 Java Excel Apache POI 簡介是用Java編寫的免費開源的跨平臺的 Java API,Ap
php使用phpexcel類操作excel檔案資料
php使用phpexcel類操作excel檔案資料 首先下載phpexcel git地址:https://github.com/PHPOffice/PHPExcel/releases 這裡下載了1.8.1.zip 解壓之後進入目錄,Classes目錄,複製PHPExcel.php和
利用ADO操作Excel檔案
今天花時間研究了一下ADO操作Excel檔案的問題,跟大家分享一下: 首先利用Excel2003建立了一個名為Demo.xls的檔案,內容如下: Name Age TY 12 TZL 15 然後開啟VC,建立一個命令列應用程式。然後如一般的ADO程式一樣編寫
Java生成和操作Excel檔案
JAVA EXCEL API:是一開放原始碼專案,通過它Java開發人員可以讀取Excel檔案的內容、建立新的Excel檔案、更新已經存在的Excel檔案。使用該API非Windows作業系統也可以通過純Java應用來處理Excel資料表。因為它是使用Java編寫的,所以我們在Web應用中可以通過
Java使用Apache POI操作Excel檔案
這裡有一篇非常細緻的文章,可供需要時候檢視 Apache POI使用詳解 1. 新建Maven專案,引入POI的依賴 <!-- apache POI for xls --&
python操作Excel檔案之openpyxl
安裝和配置 安裝openpyxl模組: pip install openpyxl 若想使用插入圖片的功能: pip install pillow 知識點講解 workbook 工作薄:一個Excel 檔案是一個工作薄 worksheet 工作表:一個工作薄
xlslib操作excel檔案
一、xlslib介紹 xlslib庫是用來建立excel檔案、libxls是用來讀取excel檔案的,在使用C++或者QT語言來設計對excel檔案的讀取。都需要事先下載這兩個庫編譯成功後再進行程式設計的。之所以選擇這兩個庫來使用,是因為這兩個庫即可以在windows系統下
使用VC++操作Excel檔案
本文件適用於: ·Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0 以上 ·Microsoft OLE 庫 第一步:建立一
java - 操作Excel檔案
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version></depend
C# 使用NPOI操作Excel檔案
什麼是NPOI? What’s NPOI This project is the .NET version of POI Java project at http://poi.apache.org/. POI is an open source p
C#以OleDb的方式操作Excel檔案(三)
二、寫Excel檔案 前面講了讀Excel檔案,後面就該寫了。 其實寫的基本過程也是類似的,設定連線字串->開啟檔案->寫檔案->關閉檔案。 開啟可寫檔案的連線字串: string strConn; strConn = @"Provider=Micro
Python操作Excel檔案
與Python中csv模組不同,Python中沒有處理Excel檔案的標準模組,所有需要xlrd和xlwt擴充套件包,這兩個包的具體安裝過程,請大家自行百度,我就不在這多敘述了,本文主要講的是Python對Excel檔案的幾個簡單操作,由於程式碼裡註釋比較詳細,所以本文文字會
MFC 操作Excel 同一個工作簿中依次新增sheet頁
1.備註:新增一個新的工作簿,其預設包含sheet12.獲取當前的sheet頁總數 long CWorksheets:: get_Count();3.獲取最後一個sheet頁 LPDISPATCH CWorksheets:: get_Item(VARIANT&am
C#專案中操作Excel檔案——使用NPOI庫
實際C#專案中經常會涉及到需要對本地Excel檔案進行操作,特別是一些包含資料記錄、分析、彙總功能模組的專案。常用的操作Excel檔案的方法主要有三個: 1. OleDb: 這種方式是把整個Excel檔案當做一個數據源來進行資料的讀取操作。 優點:實現方式簡單,讀取
使用NPOI操作Excel檔案及其日期處理
工作中經常遇到需要讀取或匯出Excel檔案的情況,而NPOI是目前最宜用、效率最高的操作的Office(不只是Excel喲)檔案的元件,使用方便,不詳細說明了。 Excel工作表約定:整個Excel表格叫做工作表:WorkBook(工作薄),包含的叫頁(工作表):She
利用java操作Excel檔案
{ //建立一個工作薄 WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls")); //待插入的工作表 WritableSh
使用python中openpyxl模組操作excel檔案,計算單元格分子式的相對分子質量(二)
在(一)文中,在最後輸出結果時,只是將相對分子質量的值輸出,並未將對應的分子式輸出,琢磨了一天,將改進的程式碼貼出來,希望大家可以給出點優化建議! import openpyxl import re def massMr(s):#定義計算相對分子質量的函式,
操作Excel檔案
1.導包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version&g
Qt QAxObject操作excel檔案過程總結
最近由於需要Qt來操作Excel檔案,所以想把QAxObject用起來,此次使用也是機緣巧合,記錄了一下心路歷程。 此前走了很多彎路,希望做同樣事情的人就別糾纏於同樣的錯誤就好。 配製方面: 1、確保Excel軟體在本地伺服器註冊成功,沒註冊成功的可以通過 在執行中"E:\