1 安装有office2007以上版本的excel
2.向项目工程中添加基本的7个类(Excel作为OLE/COM库插件,定义好了各类交互的接口,这些接口是跨语言的接口。VC可以通过导入这些接口,并通过接口来对Excel的操作),由于本文只关心对Excel表格中的数据的读取,主要关注7个接_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range、Font0。
VS2012导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类(TypeLib中的MFC类),先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再选择要导入的Excel类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office\Office15\EXCEL.exe;格式类似。
导入后会在项目中自动导入相关类,使用时需要添加其头文件,主要的头文件有:
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"
#include "CFont0.h"
3. 导入之后需要“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace”注释掉,然后添加头文件:#include <afxdisp.h>到上面7个文件中去。
4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox() 再次编译,通过!!
void CMFCApplicationWriteExcelDlg::OnBnClickedButton3() { /* 1 安装有office2007以上版本的excel 2.向项目工程中添加基本的7个类(Excel作为OLE/COM库插件,定义好了各类交互的接口, 这些接口是跨语言的接口。VC可以通过导入这些接口,并通过接口来对Excel的操作),由 于本文只关心对Excel表格中的数据的读取,主要关注7个接_Application、Workbooks、 _Workbook、Worksheets、_Worksheet、Range、Font0。 VS2012导入OLE/COM组件的接口的步骤为:项目->类向导->添加类->类型库中的MFC类 (TypeLib中的MFC类),先选择要导入的组件所在的路径,即Excel.exe所在的路径,然后再 选择要导入的Excel类型库中的接口。组件路径一般为C:\Program Files\Microsoft Office \Office15\EXCEL.exe;格式类似。 导入后会在项目中自动导入相关类,使用时需要添加其头文件,主要的头文件有: #include "CApplication.h" #include "CWorkbook.h" #include "CWorkbooks.h" #include "CWorksheet.h" #include "CWorksheets.h" #include "CRange.h" #include "CFont0.h" 3. 导入之后需要“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace”注释掉,然后添加头文件:#include <afxdisp.h>到上面7个文件中去。 4.如果有错误error C2059双击error C2059,将VARIANT DialogBox()改成VARIANT _DialogBox() 再次编译,通过!! */ //默认使用第一个sheet int nSheetNumber=1; //创建对象 CApplication app; if( !app.CreateDispatch(_T("Excel.Application"))) { AfxMessageBox("没有安装office2007以上版本,无法操作excel文件"); return ; } //定义其他内部对象 CWorkbooks books; CWorkbook book; CWorksheets sheets; CWorksheet sheet; CFont0 font; CRange range; CString FieldName,FieldValue; COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); books=app.get_Workbooks(); //需要在c盘建立一个excel文件,也可以改成系统自带的excel文件 // book=books.Add(COleVariant("c:\\aa.xlsx")); book = books.Add(covOptional); book.put_Title("Mybooks"); sheets=book.get_Sheets(); sheet=sheets.get_Item(COleVariant((short)nSheetNumber)); sheet.put_Name("wxpSheet"); //--------------------- app.put_Visible(TRUE);//可见性 app.put_UserControl(TRUE);//只读 //设置标题 FieldName="a1"; FieldValue="数据A"; range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName)); range.put_Value2(COleVariant(FieldValue)); FieldName="B1"; FieldValue="数据B"; range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName)); range.put_Value2(COleVariant(FieldValue)); //填充数据------------------------------------------------------- for(int row=1;row<10;++row) { //每一行的数据 for(int col=0;col<10;++col) { //放置自己的指定数据------------------------------ FieldName.Format("%c%d",'a'+col,(row+1)); FieldValue.Format("(%d,%d)",row+1,col+1); range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName)); // range.put_Value2(COleVariant(FieldValue)); range.put_Formula(_variant_t("=RAND()*100")); range.put_NumberFormat(_variant_t("00.00")); //设置隔行颜色 if(row %2==0) { font=range.get_Font(); font.put_Bold(COleVariant((short)TRUE)); font.put_Color(COleVariant((long)RGB(255, 0, 0))); // font.put_Name(COleVariant(_T("黑体"))); } }//end of col }//end of row //设计计算公式,所有excel中的公式都可以使用------------------------- FieldName="a11"; range=sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName)); range.put_Formula(COleVariant(_T("=sum(a2:a10"))); //自适应列宽度-------------------------------- CRange cols; cols=range.get_EntireColumn(); cols.AutoFit(); //::Sleep(5000); //读取内容----------------------------------------------------- FieldName="a11"; range = sheet.get_Range(COleVariant(FieldName),COleVariant(FieldName)); COleVariant cov = range.get_Value2(); CString str="success"; cov.ChangeType(VT_BSTR); str=cov.bstrVal; AfxMessageBox(str); //------------------------------------------------------------------ //关闭excel文件,根据需要自行决定 books.Close(); app.Quit(); books.ReleaseDispatch(); app.ReleaseDispatch(); }