MFC中使用EXCEL方法及源码文档格式.docx

上传人:b****1 文档编号:3685379 上传时间:2023-05-02 格式:DOCX 页数:17 大小:214.31KB
下载 相关 举报
MFC中使用EXCEL方法及源码文档格式.docx_第1页
第1页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第2页
第2页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第3页
第3页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第4页
第4页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第5页
第5页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第6页
第6页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第7页
第7页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第8页
第8页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第9页
第9页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第10页
第10页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第11页
第11页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第12页
第12页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第13页
第13页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第14页
第14页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第15页
第15页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第16页
第16页 / 共17页
MFC中使用EXCEL方法及源码文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MFC中使用EXCEL方法及源码文档格式.docx

《MFC中使用EXCEL方法及源码文档格式.docx》由会员分享,可在线阅读,更多相关《MFC中使用EXCEL方法及源码文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

MFC中使用EXCEL方法及源码文档格式.docx

defined_HEAD_FILE_EXCEL9_

#define_HEAD_FILE_EXCEL9_

相应的,在文件末尾加入:

#endif

成功

二、操作EXCEL文件

1.新建一个excel表,并填充两个单元格的实例

voidCTestExcelDlg:

OnButton1()

{

//Workbooks—>

Workbook—>

Worksheets—>

Worksheet—>

Range

_Applicationapp;

//Excel应用程序接口

Workbooksbooks;

//工作薄集合

_Workbookbook;

//工作薄

Worksheetssheets;

//工作表集合

_Worksheetsheet;

//工作表

Rangerange;

//Excel中针对单元格的操作都应先获取其对应的Range对象

Fontfont;

Rangecols;

/*

COleVariant类为VARIANT数据类型的包装,在自动化程序中,通常都使用

VARIANT数据类型进行参数传递。

故下列程序中,函数参数都是通过COleVariant

类来转换了的。

*/

//covOptional可选参数的VARIANT类型

COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

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=HELLOEXCEL!

range.SetValue(COleVariant("

HELLOEXCEL!

//调整格式,设置粗体

font=range.GetFont();

font.SetBold(COleVariant((short)TRUE));

//选择A2单元格,插入一个公式"

=RAND()*100000"

,并设置A2数字格式为货币形

A2"

range.SetFormula(COleVariant("

range.SetNumberFormat(COleVariant("

$0.00"

//选择A:

A列,设置宽度为自动适应

cols=range.GetEntireColumn();

cols.AutoFit();

//显示Excel表格,并设置状态为用户可控制

app.SetVisible(TRUE);

app.SetUserControl(TRUE);

2.打开一个已有的excel表格实例

CStringstrPath;

strPath+="

C:

\\template.xlt"

;

//模板的路径

CFileFindfilefind;

filefind.FindFile(strPath))

{

AfxMessageBox("

没有找到模版文档,请其查找"

);

return;

}

LPDISPATCHlpDisp;

//接口指针

lpDisp=books.Open(m_filepath,

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类,这个只是一个示例,转换较为简单。

COleVariantrValue;

rValue=COleVariant(range.GetValue2());

rValue.ChangeType(VT_BSTR);

returnCString(rValue.bstrVal);

8.还有释放问题是最重要的问题:

首先变量必须全释放,无论当初是否绑定过;

其次,程序释放和程序关闭的顺序必须是

如果顺如颠倒如下:

出现的后果是程序关闭后,excel进程仍然运行,所以无法正常打开程序曾经打开excel表格。

附录(操作类源码):

../Stdafx.h"

OptExcel.h"

comdef.h"

Rangecell;

 

////////////////////////////////////////////////////////////////////////

///Function:

COptExcel

///Description:

初始化函数,初始化中附加excel应用程序

///Call:

app.CreateDispatch(_T("

COptExcel:

COptExcel(void)

if(:

CoInitialize(NULL)==E_INVALIDARG)

{

AfxMessageBox(_T("

初始化Com失败!

return;

}

//验证office文件是否可以正确运行

if(!

app.CreateDispatch(_T("

)))

{

//在程序执行文件路径名中,剪掉执行文件名,得到程序路径,追加模板文件名,得到模板完整路径

~COptExcel

析构函数,释放对象,非常重要,不全部释放,占用内存,下

///一次使用此类时会中断

ReleaseDispatch()

~COptExcel(void)

books.ReleaseDispatch();

book.ReleaseDispatch();

sheets.ReleaseDispatch();

sheet.ReleaseDispatch();

range.ReleaseDispatch();

font.ReleaseDispatch();

cell.ReleaseDispatch();

app.Quit();

app.ReleaseDispatch();

:

CoUninitialize();

OpenExcelBook

打开表名为filename的文件,注意,文件路径非自动生成,以后

///考虑从下处理方法

GetAppPath()

///Input:

CStringfilename文件名

boolCOptExcel:

OpenExcelBook(CStringfilename)

CFileFindfilefind;

filefind.FindFile(filename))

文件不存在"

returnfalse;

LPDISPATCHlpDisp;

//接口指针

books=app.GetWorkbooks();

lpDisp=books.Open(filename,

covOptional,covOptional,covOptional,covOptional,

covOptional,covOptional

);

//与office2000的不同,是个参数的,直接在后面加了两个covOptional成功了

book.AttachDispatch(lpDisp);

sheets=book.GetSheets();

sheet=sheets.GetItem(COleVariant((short)1));

//与的不同,是个参数的,直接在后面加了两个covOptional成功了

returntrue;

voidCOptExcel:

NewExcelBook()

book=books.Add(covOptional);

OpenExcelApp

打开应用程序(要注意以后如何识别用户要打开的是哪个文件)

OpenExcelApp(void)

app.SetVisible(TRUE);

app.SetUserControl(TRUE);

SaveExcel

用于打开数据文件,续存数据后直接保存

SaveExcel(void)

book.SetSaved(TRUE);

SaveAsExcel

保存excel文件

SaveAsExcel(CStringfilename)

book.SaveAs(COleVariant(filename),covOptional,

covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,

covOptional,covOptional);

SetCellValue

修改单元格内的值

IndexToString()从(x,y)坐标形式转化为“A1”格式字符串

introw单元格所在行

///intcol单元格所在列

///intAlign对齐方式默认为居中

SetCellValue(introw,intcol,intAlign)

range=sheet.GetRange(COleVariant(IndexToString(row,col)),COleVariant(IndexToString(row,col)));

range.SetValue2(COleVariant(value));

cell.AttachDispatch((range.GetItem(COleVariant(long

(1)),COleVariant(long

(1)))).pdispVal);

cell.SetHorizontalAlignment(COleVariant((short)Align));

GetCellValue

得到的单元格中的值

///Return:

CString单元格中的值

CStringCOptExcel:

GetCellValue(introw,intcol)

COleVariantrValue;

rValue=COleVariant(range.GetValue2());

rValue.ChangeType(VT_BSTR);

returnCString(rValue.bstrVal);

SetRowHeight

设置行高

SetRowHeight(introw,CStringheight)

intcol=1;

range.SetRowHeight(COleVariant(height));

SetColumnWidth

设置列宽

intcol要设置列宽的列

///CString宽值

SetColumnWidth(intcol,CStringwidth)

introw=1;

range.SetColumnWidth(COleVariant(width));

///Call

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2