搜索
bottom↓
回复: 3

VS08 操作 已经打开的excel问题

[复制链接]

出0入0汤圆

发表于 2012-2-29 14:25:08 | 显示全部楼层 |阅读模式
TCHAR szCurrPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szCurrPath);// 得到程序所在目录
strFile = szCurrPath;  
strFile += "\\demo.xls";
  app.SetVisible(TRUE); //excel不可见
  app.SetUserControl(TRUE); //允許其它用戶控制Excel
app.SetAlertBeforeOverwriting(FALSE);
app.SetDisplayAlerts(FALSE); //表示是否忽略警告信息,比如提示“文件xxx.xls已经存在是否覆盖?”,若SetDisplayAlerts的参数为FALSE则不出现提示信并默认覆盖。
  //COleDispatchDriver::m_bAutoRelease
  //说明:如果为TRUE,则当调用ReleaseDispatch或COleDispatchDriver对象被销毁时,由m_lpDispatch访问的COM对象将被自动释放。
  //缺省的,在构造函数中m_bAutoRelease被设置为TRUE。
  //打开demo.xls
  books.AttachDispatch(app.GetWorkbooks());
  lpDisp = books.Open(strDatePath,  
  covOptional, covOptional , covOptional, covOptional, covOptional,
  covOptional, covOptional, covOptional, covOptional, covOptional,
  covOptional, covOptional, covOptional, covOptional);
  /////////////////////////////////////////////////////////////
  。。。。。。
  /////////////////////////////////////////////////////////////
  //保存
  book.SaveAs(COleVariant(strFile),covOptional,covOptional,
  covOptional,covOptional,covOptional,0,covOptional,
  covOptional,covOptional,covOptional,covOptional);   


  //关闭所有的book,退出Excel  
  book.Close (covOptional,COleVariant(strDatePath),covOptional);
  books.Close();   
   
  usedRange.ReleaseDispatch();
  range.ReleaseDispatch();//释放对象
  sheet.ReleaseDispatch();
  sheets.ReleaseDispatch();
  book.ReleaseDispatch();
  books.ReleaseDispatch();

  app.Quit();
  app.ReleaseDispatch();  
   

打开excel的程序如上所示,现在小弟的问题是这样的:
(1)demo.xls未打开,程序执行都没问题,往excel表里填写数据、保存都正确。
(2)demo.xls先打开,再执行程序,程序执行后,发现demo.xls的数据未变化,还是原来的数据。此时,我如果把这两句给注释掉 app.SetAlertBeforeOverwriting(FALSE);
app.SetDisplayAlerts(FALSE); //表示是否忽略警告信息,比如提示“文件xxx.xls已经存在是否覆盖?”,若SetDisplayAlerts的参数为FALSE则不出现提示信并默认覆盖。
就会出现文件已打开,需要覆盖类似的提示,下面有三个选项(1,是 2.否 3 .取消),我选择1.是 的时候,程序能正常执行,但是数据还是未保存。 选择2,3时都会出现错误,执行文件被中断。


以上是我最近在用VC操作excel表时出现的一些问题,请大家帮忙改正一下。先谢谢了~~

程序参考:
http://apps.hi.baidu.com/share/detail/22029062
http://hi.baidu.com/yimeng08/blog/item/a4de101565fab7ee1ad57647.html


文件保存提示错误和这篇文章的问题是一样的~~
http://www.officexy.com/Articles/Outlook/OutlookVBA/2006102993747161.htm
用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文件后并重新打开发现数据还是丢失。
想尽所有办法,可总无法去掉那个讨厌的"另存为"对话框,请各位大虾帮忙。多谢了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-2-29 14:25:31 | 显示全部楼层
在线等~~

出0入0汤圆

发表于 2012-2-29 14:49:13 | 显示全部楼层
表述能力有待提高
文件既然已经打开了,那再次打开就是只读了,当然写不进去了,我之前使用的时候也遇到这个问题,但我觉得这个不是问题
这种问题还是不要在这里提了,用过的人不多

出0入0汤圆

 楼主| 发表于 2012-2-29 15:27:54 | 显示全部楼层
回复【2楼】gold
-----------------------------------------------------------------------

哦~感谢回答
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表