MFC操作excel存取数据全步骤.docx_第1页
MFC操作excel存取数据全步骤.docx_第2页
MFC操作excel存取数据全步骤.docx_第3页
MFC操作excel存取数据全步骤.docx_第4页
MFC操作excel存取数据全步骤.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 对excel的保存: 1) excel合成需要如下步骤:通过MFC工程的类向导添加类,并从现有类库中选择(from a type library),在弹出的对话框中选择office的excel.exe(或者是excel.olb),这里必须是office,而不能是wps,(对应得是et.exe,而不是excel.exe)。2) 在弹出的对话框中选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,即可达到用MFC操作excel的前提条件。3) 然后再用相应的MFC语句生成excel表格,注意excel保存时需要添加“comdef.h”头文件。4) 程序如下:在对应(需要操作excel的)的CPP文件前加#includecomdef.h_ApplicationExcelApp;Workbooksworkbooks;_Workbookworkbook;Worksheetssheets;_Worksheetsheet;Rangerange;if(!ExcelApp.CreateDispatch(Excel.Application,NULL)AfxMessageBox(创建Excel服务失败!);/创建Excel2000服务器(启动Excel)ExcelApp.SetVisible(false);workbooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);/用来锁定对应的工作簿workbook.AttachDispatch(workbooks.Add(COleVariant(_bstr_t)CString().AllocSysString();/得到Worksheetssheets.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(This Is A Excel Test Program!);TCHARszPathMAX_PATH;:GetCurrentDirectory(MAX_PATH,szPath);CStringstrPath(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();2. 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类的操作在这里不赘述。) / OLE Variant for Optional. COleVariant VOptional(long)DISP_E_PARAMNOTFOUND, VT_ERROR); _Application objApp; _Workbook objBook; Workbooks objBooks; WorkSheets objSheets; _Worksheet objSheet; Range objRange; VARIANT ret; TCHAR szPathMAX_PATH; :GetCurrentDirectory(MAX_PATH, szPath); CString strPath(szPath); strPath +=_T(test.xlsx); / Instantiate Excel and open an existing workbook. 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); /Get the range object for which you wish to retrieve the /data and then retrieve the data (as a variant array, 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(); CString str; /Create the SAFEARRAY from the VARIANT ret. COleSafeArray sa(ret); /Determine the arrays dimensions. long lNumRows; long lNumCols; sa.GetUBound(1, &lNumRows); sa.GetUBound(2, &lNumCols); /Display the elements in the SAFEARRAY. long index2; VARIANT val; int r, c; TRACE(Contents of SafeArrayn); TRACE(=nt); for(c=1;c=lNumCols;c+) TRACE(ttCol %d, c); TRACE(n); for(r=1;r=lNumRows;r+) TRACE(Row %d, r); for(c=1;c=lNumCols;c+) index0=r; index1=c; sa.GetElement(index, &val); switch(val.vt) case VT_R8: TRACE(tt%1.2f, val.dblVal); str.Format(%f,val.dblVal); break; case VT_BSTR: TRACE(tt%s,(CString)val.bstrVal); str=val.bstrVal; break; case VT_EMPTY: TRACE(tt); str=; break; TRACE(n); m_edit1=str; /Close the workbook w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论