我以前写了个VC操作Excel 2003的例子,是一个Console的程序,你可以修改一下文件保 存的路径,然后运行一下看看。 blog.donews/dukejoe/archive/2007/04/16/1156319.aspx
以下是一部分的VC代码,全部的看链接吧。我就不都粘了
VC操作Excel文件保存问题
用VC对Excel文件进行写操作后, 在程序结束前需要对一些对象进行收尾
工作, 如调用_Workbook::Save() 方法(该方法是Microsoft提供的供VC调用的对Excel文件操作的标准方法,在文件excel9.cpp或 excel.cpp中定义)保存文件。
问题就出现在这里, 若选取要保存的Excel文件以前不存在则
程序创建一个同名的空Excel文件, 对Excel 表的操作实际是对其同名副本的操作,Save()方法会触发一个"另存为"的对话框,需要覆盖原来同名的空 Excel文件,否则写入Excel的数据会丢失。若选取的Excel文件已经存在,则调用Save()方法不会触发" 另存为"对话框,
系统会自动保存写到Excel中的数据。 需要说明的是,在调用Save()前,已经调用过SetAlertBeforeOverwriting(FALSE)和 SetDisplayAlerts(FALSE)关掉一些警告窗口了。若调用SaveAs()方法,虽不会触发"另存为"对话框,但
会出抛出“找不到成员”的错误,这时保存写好的Excel文件后并重新打开发现数据还是丢失。 想尽所有办法,可总无法去掉那个讨厌的"另存为"对话框,请各位大虾帮忙。多谢了!
SaveAs()是excelapp的方法吗。 xlApp.ActiveWorkbook.SaveAs "C:\excel.xls" xlApp.Quit 我的没有问题。
如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术, 我们可以在不去了解 数据库的情况下玩转Excel,而且你会发现一切竟如此轻松! 好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段, 总体上是个连贯的过程, 包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格 的处理。 特别说明以下代码需要MFC的支持, 而且工程中还要包含EXCEL2000的定义文件: EXCEL9.H, EXCEL9.CPP ******************************************************************************************** ********************* //***** //变量定义 _Application app; Workbooks books; _Workbook book; Worksheets sheets; _Worksheet sheet; Range range; Range iCell; LPDISPATCH lpDisp; COleVariant vResult;
COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//***** //初始化COM的动态连接库 if(!AfxOleInit()) { AfxMessageBox("无法初始化COM的动态连接库!"); return ; }
//***** //创建Excel 2000服务器(启动Excel) if(!app.CreateDispatch("Excel.Application")) { AfxMessageBox("无法启动Excel服务器!"); return; }
app.SetVisible(TRUE); app.SetUserControl(TRUE);
//使Excel可见 //允许其它用户控制Excel
//***** //打开c:\\1.xls books.AttachDispatch(app.GetWorkbooks()); lpDisp = books.Open("C:\\\\1.xls",
covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional, covOptional );
//***** //得到Workbook book.AttachDispatch(lpDisp);
//***** //得到Worksheets sheets.AttachDispatch(book.GetWorksheets());
//***** //得到当前活跃sheet //如果有单元格正处于编辑状态中,此操作不能返回,会一直等待 lpDisp=book.GetActiveSheet(); sheet.AttachDispatch(lpDisp);
//***** //读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列 Range us