范冰冰亲吻白鲸是哪期:VS2008平台下,MFC操作EXCEL简单示例htrdh

来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 18:00:41

我的电脑上,office版本是2007的,安在C盘的默认位置上。

生成时,选择“单文档框架”,“Compound document support: Container ”其他默认~

在“ClassView”视图中,右键单击project,添加class。

选择“MFC->MFC Class from TypeLib”

Add class from:Registry中,选择“Microsoft Excel 12.0 Object Library<1.6>”

在下面选择,“_Application, _Worksheet, _Workbook, Font, Range, Worksheets, Workbooks”到右侧的“Generated classes”并单击确定。

把生成的CRange.h和CRange0.h中的“DialogBox”函数前面加上一个下划线,改成“_DialogBox”

注销掉,所有新添加的类的头文件中的“//#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace” 语句。

并把这些头文件中都添加一下代码

#include
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll" rename("RGB", "MSRGB") rename("DocumentProperties", "JOEDocumentProperties")
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "JOEVBE")
#import "C:\\Program Files\\Microsoft Office\\OFFICE12\\excel.exe" exclude("IFont", "IPicture") rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "JOEVBE"), rename("ReplaceText", "JOEReplaceText"), rename("CopyFile","JOECopyFile"), rename("FindText", "JOEFindText"), rename("NoPrompt", "JOENoPrompt")
using namespace Office;
using namespace VBIDE;
using namespace Excel ;

在这些新添加的头文件的起始处添加:

#ifndef _XXXX_H
#define _XXXX_H

其中XXXX为文件名或者自行定义本头文件专用的宏标记

头文件尾部添加:

#endif

stdafx.h中include这些都文件~

于是就可以使用excel的编程方法咯。

比如,新建一个菜单栏选项,并添加消息响应函数,在其中添加如下代码:

CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange0 range;
CFont0 font;
CRange0 cols;
int i = 3;
CString str1, str2;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if( !app.CreateDispatch(_T("Excel.Application")))
{
MessageBoxW(_T("无法创建Excel应用!"));
return;
}
books=app.get_Workbooks();
book=books.Add(covOptional);
sheets=book.get_Sheets();
sheet=sheets.get_Item(COleVariant((short)1));
range=sheet.get_Range(COleVariant(_T("A1")),COleVariant(_T("A1")));
range.put_Value2(COleVariant(_T("HELLO EXCEL!")));
font=range.get_Font();
font.put_Bold(COleVariant((short)TRUE));
range=sheet.get_Range(COleVariant(_T("A2")),COleVariant(_T("A2")));
range.put_Formula(COleVariant(_T("=RAND()*")));
range.put_NumberFormat(COleVariant(_T("$0.00")));
str1.Format(_T("A%d"),i);
str2.Format(_T("A%d"),i);
range=sheet.get_Range(COleVariant(str1),COleVariant(str2));
str1.Format(_T("%d"),44);
range.put_Value2(COleVariant(str1));
cols=range.get_EntireColumn();
cols.AutoFit();
app.put_Visible(TRUE);
app.put_UserControl(TRUE);

经测试,可以运行~