VC操作Excel文件保存

上传人:小** 文档编号:158187220 上传时间:2022-10-03 格式:DOC 页数:8 大小:37KB
收藏 版权申诉 举报 下载
VC操作Excel文件保存_第1页
第1页 / 共8页
VC操作Excel文件保存_第2页
第2页 / 共8页
VC操作Excel文件保存_第3页
第3页 / 共8页
资源描述:

《VC操作Excel文件保存》由会员分享,可在线阅读,更多相关《VC操作Excel文件保存(8页珍藏版)》请在装配图网上搜索。

1、VC操作Excel文件保存用VC对Excel文件进行写操作后,在程序结束前需要对一些对象进行收尾工作,如调用_Workbook:Save()方法(该方法是Microsoft提供的供VC调用的对Excel文件操作的标准方法,在文件excel9.cpp或excel.cpp中定义)保存文件。问题就出现在这里,若选取要保存的Excel文件以前不存在则程序创建一个同名的空Excel文件,对Excel表的操作实际是对其同名副本的操作,Save()方法会触发一个另存为的对话框,需要覆盖原来同名的空Excel文件,否则写入Excel的数据会丢失。若选取的Excel文件已经存在,则调用Save()方法不会触发另

2、存为对话框,系统会自动保存写到Excel中的数据。需要说明的是,在调用Save()前,已经调用过SetAlertBeforeOverwriting(FALSE)和SetDisplayAlerts(FALSE)关掉一些警告窗口了。若调用SaveAs()方法,虽不会触发另存为对话框,但会出抛出找不到成员”的错误,这时保存写好的Excel文件后并重新打开发现数据还是丢失。想尽所有办法,可总无法去掉那个讨厌的另存为对话框,请各位大虾帮忙。多谢了!SaveAs()是excelapp的方法吗。xlApp.ActiveWorkbook.SaveAsC:excel.xlsxlApp.Quit我的没有问题。如今

3、Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术,我们可以在不去了解数据库的情况下玩转Excel,而且你会发现一切竟如此轻松!好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP/变量定义_Applicationapp;Workbooksbooks;_Wo

4、rkbookbook;Worksheetssheets;_Worksheetsheet;Rangerange;RangeiCell;LPDISPATCHlpDisp;COleVariantvResult;COleVariantcovTrue(short)TRUE),covFalse(short)FALSE),covOptional(long)DISP_E_PARAMNOTFOUND,VT_ERROR);/初始化COM的动态连接库if(!AfxOleInit()AfxMessageBox(无法初始化COM的动态连接库!);return;创建Excel2000服务器(启动Excel)if(!app

5、.CreateDispatch(Excel.Application)AfxMessageBox(无法启动Excel服务器!);return;app.SetVisible(TRUE);使Excel可见app.SetUserControl(TRUE);/允许其它用户控制Excel/*打开c:1.xlsbooks.AttachDispatch(app.GetWorkbooks();lpDisp=books.Open(C:1.xls,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,c

6、ovOptional,covOptional,covOptional,covOptional,covOptional);/得到Workbookbook.AttachDispatch(lpDisp);/得到Worksheetssheets.AttachDispatch(book.GetWorksheets();/得到当前活跃sheet/如果有单元格正处于编辑状态中,此操作不能返回,会一直等待lpDisp=book.GetActiveSheet();sheet.AttachDispatch(lpDisp);/读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列RangeusedRang

7、e;usedRange.AttachDispatch(sheet.GetUsedRange();range.AttachDispatch(usedRange.GetRows();longiRowNum=range.GetCount();/已经使用的行数range.AttachDispatch(usedRange.GetColumns();/已经使用的列数/已使用区域的起始行,从1开始/已使用区域的起始列,从1开始longiColNum=range.GetCount();longiStartRow=usedRange.GetRow();longiStartCol=usedRange.GetCol

8、umn();/读取第一个单元格的值range.AttachDispatch(sheet.GetCells();range.AttachDispatch(range.GetItem(COleVariant(long)1),COleVariant(long)1).pdispVal);COleVariantvResult=range.GetValue();CStringstr;if(vResult.vt=VT_BSTR)/字符串str=vResult.bstrVal;elseif(vResult.vt=VT_R8)/8字节的数字str.Format(%f,vResult.dblVal);elseif

9、(vResult.vt=VT_DATE)/时间格式SYSTEMTIMEst;VariantTimeToSystemTime(&vResult.date,&st);elseif(vResult.vt=VT_EMPTY)/单元格空的str=;读取第一个单元格的对齐方式,数据类型:VT_I4/读取水平对齐方式range.AttachDispatch(sheet.GetCells();iCell.AttachDispatch(range.GetItem(COleVariant(long(1),COleVariant(long(1).pdispVal);vResult.lVal=0;vResult=iC

10、ell.GetHorizontalAlignment();if(vResult.lVal!=0)switch(vResult.lVal)case1:/默认break;case-4108:/居中break;case-4131:/靠左break;case-4152:/靠右break;/垂直对齐方式iCell.AttachDispatch(range.GetItem(COleVariant(long(1),COleVariant(long(1).pdispVal);vResult.lVal=0;vResult=iCell.GetVerticalAlignment();if(vResult.lVal!

11、=0)switch(vResult.lVal)case-4160:/靠上break;case-4108:/居中break;case-4107:/靠下break;设置第一个单元格的值HI,EXCEL!range.SetItem(COleVariant(1),COleVariant(1),COleVariant(HI,EXCEL!);/*/设置第一个单元格字体颜色:红色Fontfont;range.AttachDispatch(sheet.GetCells();range.AttachDispatch(range.GetItem(COleVariant(long(1),COleVariant(lo

12、ng(1).pdispVal);font.SetColor(COleVariant(long)0xFF0000);/合并单元格的处理/包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并RangeunionRange;range.AttachDispatch(sheet.GetCells();unionRange.AttachDispatch(range.GetItem(COleVariant(long)1),COleVariant(long)1).pdispVal);vResult=unionRange.GetMergeCells();if(vResult.boolVal=-1)

13、/是合并的单元格/合并单元格的行数range.AttachDispatch(unionRange.GetRows();longiUnionRowNum=range.GetCount();/合并单元格的列数range.AttachDispatch(unionRange.GetColumns();longiUnionColumnNum=range.GetCount();/合并区域的起始行,列longiUnionStartRow=unionRange.GetRow();/起始行,从1开始longiUnionStartCol=unionRange.GetColumn();/起始列,从1开始elseif

14、(vResult.boolVal=0)/不是合并的单元格/将第一个单元格合并成2行,3列range.AttachDispatch(sheet.GetCells();unionRange.AttachDispatch(range.GetItem(COleVariant(long)1),COleVariant(long)1).pdispVal);unionRange.AttachDispatch(unionRange.GetResize(COleVariant(long)2),COleVariant(long)3);unionRange.Merge(COleVariant(long)0);/合并单

15、元格/将文件保存为2.xlsbook.SaveAs(COleVariant(C:2.xls),covOptional,covOptional,covOptional,covOptional,covOptional,0,covOptional,covOptional,covOptional,covOptional);关闭所有的book,退出Excelbook.Close(covOptional,COleVariant(OutFilename),covOptional);books.Close();app.Quit();/Excel保存Sheet.OleProcedure(SaveAs,FName.c_str();

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!