一步一步教你如何通过MFC操作excel文档格式.docx

上传人:b****1 文档编号:1197528 上传时间:2023-04-30 格式:DOCX 页数:10 大小:150.79KB
下载 相关 举报
一步一步教你如何通过MFC操作excel文档格式.docx_第1页
第1页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第2页
第2页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第3页
第3页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第4页
第4页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第5页
第5页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第6页
第6页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第7页
第7页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第8页
第8页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第9页
第9页 / 共10页
一步一步教你如何通过MFC操作excel文档格式.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

一步一步教你如何通过MFC操作excel文档格式.docx

《一步一步教你如何通过MFC操作excel文档格式.docx》由会员分享,可在线阅读,更多相关《一步一步教你如何通过MFC操作excel文档格式.docx(10页珍藏版)》请在冰点文库上搜索。

一步一步教你如何通过MFC操作excel文档格式.docx

初始化Ole出错!

"

);

returnFALSE;

},效果如图:

注意excel保存时需要添加“comdef.h”头文件。

到此为止,excel在MFC中的配置环境已完成。

接下来添加一个按键,用于保存成excel文档,按键对应的程序如下:

在对应(需要操作excel的)的CPP文件前加#include 

comdef.h"

_Application 

ExcelApp;

 

Workbooks 

workbooks;

_Workbook 

workbook;

Worksheets 

sheets;

_Worksheet 

sheet;

Range 

range;

if 

(!

ExcelApp.CreateDispatch("

Excel.Application"

NULL)) 

创建Excel服务失败!

//创建Excel 

2000服务器(启动Excel) 

ExcelApp.SetVisible(false);

workbooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);

//用来锁定对应的工作簿

workbook.AttachDispatch(workbooks.Add(COleVariant((_bstr_t)CString().AllocSysString())));

//得到Worksheets 

sheets.AttachDispatch(workbook.GetWorksheets(),true);

sheet.AttachDispatch(sheets.GetItem(_variant_t("

Sheet1"

)),true);

//得到全部Cells,此时,range是cells的集合.

range.AttachDispatch(sheet.GetCells(),true);

//设置1行2列的单元的值

range.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("

ThisIsAExcelTestProgram!

));

TCHAR 

szPath[MAX_PATH];

GetCurrentDirectory(MAX_PATH, 

szPath);

CString 

strPath(szPath);

strPath 

+=_T("

\\test.xlsx"

sheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,

vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);

ExcelApp.SetVisible(true);

ExcelApp.ReleaseDispatch();

workbooks.ReleaseDispatch();

workbook.ReleaseDispatch();

sheets.ReleaseDispatch();

sheet.ReleaseDispatch();

Excel的数据读取:

运用在MSDN中的示例函数(具体函数见excel文档创建示例4):

根据顺序,依次从系统中获取app、books、book、sheets、sheet、range、对象,然后获取路径strpath。

即可打开已有的excel文档。

通过定义variant格式的数据对象,得到range(单元格)的数据,再存储到COleSafeArray类型的对象之中,然后进行相关的处理,再显示到编辑框之中。

在编辑过程中,出现并解决了如下几个问题:

1)Getvalue()(即从单元格中获取值的函数)在excel2000以及之前的库中没有参数,但是在excel2003即以后的库中有了参数,本例使用的事office2000,所以,当我用Getvalue()时出现编辑错误,用Gettext()同样出错,而Getvalue2()的参数情况却没有改变,只是它的返回值是二维数组。

2)Range.open()函数在msdn的示例中带有13个参数(一个路径,12个VOptional,)但在实践中却是15个参数(一个路径参数,14个VOptional)。

否则编译出错。

3)程序中,Trace的作用是便于观看程序运行情况,可以通过调试->

停止调试,然后查看VCIDE窗口(程序运行报错窗口),则可看见Trace内容。

4)Debugview软件是一个专门的调试软件,可以捕获程序中由TRACE(debug版本)和OutputDebugString输出的信息。

同样可以用于查看本示例中的Trace内容。

5)程序如下(本程序是接在excel存数之后的,所以,添加excel类的操作在这里不赘述。

//OLEVariantforOptional.

COleVariantVOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);

_ApplicationobjApp;

_WorkbookobjBook;

WorkbooksobjBooks;

WorkSheetsobjSheets;

_WorksheetobjSheet;

RangeobjRange;

VARIANTret;

TCHARszPath[MAX_PATH];

:

GetCurrentDirectory(MAX_PATH,szPath);

CStringstrPath(szPath);

strPath+=_T("

//InstantiateExcelandopenanexistingworkbook.

objApp.CreateDispatch("

objBooks=objApp.GetWorkbooks();

objBook=objBooks.Open(strPath,

VOptional,VOptional,VOptional,VOptional,

VOptional,VOptional,VOptional,VOptional

VOptional,VOptional

);

objSheets=objBook.GetWorksheets();

objSheet=objSheets.GetItem(COleVariant((short)1));

//Gettherangeobjectforwhichyouwishtoretrievethe

//dataandthenretrievethedata(asavariantarray,ret).

objRange=objSheet.GetRange(COleVariant("

A1"

),COleVariant("

A2"

//objRange.AttachDispatch(objRange.GetItem(COleVariant((long)2),COleVariant((long)2)).pdispVal);

//ret=objRange.GetText();

//ret=objRange.GetValue2();

ret=objRange.GetValue2();

CStringstr;

//CreatetheSAFEARRAYfromtheVARIANTret.

COleSafeArraysa(ret);

//Determinethearray'

sdimensions.

longlNumRows;

longlNumCols;

sa.GetUBound(1,&

lNumRows);

sa.GetUBound(2,&

lNumCols);

//DisplaytheelementsintheSAFEARRAY.

longindex[2];

VARIANTval;

intr,c;

TRACE("

ContentsofSafeArray\n"

=====================\n\t"

for(c=1;

c<

=lNumCols;

c++)

{

\t\tCol%d"

c);

}

\n"

for(r=1;

r<

=lNumRows;

r++)

Row%d"

r);

index[0]=r;

index[1]=c;

sa.GetElement(index,&

val);

switch(val.vt)

caseVT_R8:

\t\t%1.2f"

val.dblVal);

str.Format("

%f"

val.dblVal);

break;

caseVT_BSTR:

\t\t%s"

(CString)val.bstrVal);

str=val.bstrVal;

caseVT_EMPTY:

\t\t<

empty>

str="

;

m_edit1=str;

//Closetheworkbookwithoutsavingchanges

//andquitMicrosoftExcel.

objBook.Close(COleVariant((short)FALSE),VOptional,VOptional);

objApp.Quit();

UpdateData(FALSE);

注解:

读取程序本人操作是将excel中的信息读取出来显示到一个编辑框中。

读取程序能对应读出来。

亲测。

具体语句望能XX详解之。

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

当前位置:首页 > 高等教育 > 理学

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

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