一步一步教你如何通过MFC操作excel.docx
- 文档编号:10282111
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:9
- 大小:150.82KB
一步一步教你如何通过MFC操作excel.docx
《一步一步教你如何通过MFC操作excel.docx》由会员分享,可在线阅读,更多相关《一步一步教你如何通过MFC操作excel.docx(9页珍藏版)》请在冰点文库上搜索。
一步一步教你如何通过MFC操作excel
excel合成需要如下步骤:
打开MFC工程(任何工程都可以,此处以串口为例)
打开MFC工程类向导并选择Automation
点击Addclass,并选择fromatypelibrary。
江会弹出如下浏览框
在浏览框中找到并选择office的excel.exe(或者是excel.olb),这里必须是office,而不能是wps,因为wps对应的事excel.et而不是exe文件,这里我选择的是excel.exe,我是用的是office2010,通过电脑的文件搜索功能定位了excel.exe的位置并添加的。
à打开excel.exe之后,选择新类,如图
总共选择六个类,分别是_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,即可达到用MFC操作excel的前提条件。
选完之后,可在classview中看到如下六个新类。
在My***Dlg.cpp中加入#include”excel.h”与#include”comdef.h”,同时,在My***.cpp中加入#include”excel.h”
在My***App:
:
InitInstance(),加入如下代码:
if(!
AfxOleInit()){
AfxMessageBox("初始化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))
{
AfxMessageBox("创建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("\\test.xlsx");
//InstantiateExcelandopenanexistingworkbook.
objApp.CreateDispatch("Excel.Application");
objBooks=objApp.GetWorkbooks();
objBook=objBooks.Open(strPath,
VOptional,VOptional,VOptional,VOptional,
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");
TRACE("=====================\n\t");
for(c=1;c<=lNumCols;c++)
{
TRACE("\t\tCol%d",c);
}
TRACE("\n");
for(r=1;r<=lNumRows;r++)
{
TRACE("Row%d",r);
for(c=1;c<=lNumCols;c++)
{
index[0]=r;
index[1]=c;
sa.GetElement(index,&val);
switch(val.vt)
{
caseVT_R8:
{
TRACE("\t\t%1.2f",val.dblVal);
str.Format("%f",val.dblVal);
break;
}
caseVT_BSTR:
{
TRACE("\t\t%s",(CString)val.bstrVal);
str=val.bstrVal;
break;
}
caseVT_EMPTY:
{
TRACE("\t\t
str="";
break;
}
}
}
TRACE("\n");
m_edit1=str;
}
//Closetheworkbookwithoutsavingchanges
//andquitMicrosoftExcel.
objBook.Close(COleVariant((short)FALSE),VOptional,VOptional);
objApp.Quit();
UpdateData(FALSE);
注解:
读取程序本人操作是将excel中的信息读取出来显示到一个编辑框中。
读取程序能对应读出来。
亲测。
具体语句望能XX详解之。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一步一步 如何 通过 MFC 操作 excel
![提示](https://static.bingdoc.com/images/bang_tan.gif)