MFC中使用App.Quit();无法退出Excel表格的解决方法

1 现象描述

		if (!appExcel.CreateDispatch("Excel.Application")) {
			return FALSE;
		}

		wbsBooks.AttachDispatch(appExcel.get_Workbooks());
		lpDisp = wbsBooks.Open(m_csXlsPath,covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption);
		wbBook.AttachDispatch(lpDisp);
		lpDisp = wbBook.get_ActiveSheet();
		wsSheet.AttachDispatch(lpDisp);
		rangeBasicCells.AttachDispatch(wsSheet.get_Cells());

		rangeUsedCells.AttachDispatch(wsSheet.get_UsedRange());
		rangeTempCells.AttachDispatch(rangeUsedCells.get_Columns());
		lMaxColNum = rangeTempCells.get_Count();
		rangeTempCells.AttachDispatch(rangeUsedCells.get_Rows());
		lMaxRowNum = rangeTempCells.get_Count();
		lStartCol = rangeUsedCells.get_Column();
		lStartRow = rangeUsedCells.get_Row();
		rangeUsedCells.ReleaseDispatch();
		rangeTempCells.ReleaseDispatch();

		GetInfoFromExc(rangeBasicCells, lMaxRowNum);

		rangeBasicCells.ReleaseDispatch();
		wsSheet.ReleaseDispatch();
		wbBook.ReleaseDispatch();
		wbsBooks.Close();
		wbsBooks.ReleaseDispatch();//*****标记1******
		appExcel.Quit();
		appExcel.ReleaseDispatch();

以上代码中,最初,注释为“//*****标记1******”这行代码并不存在,执行代码后Excel进程并不会从后台结束。当加上这行代码后Excel进程才会从后台结束。原因是,wbsBooks没有释放,appExcel不能退出。

2 该类问题解决方法

1)查看与Execl相关的变量是否全部都ReleaseDispatch了。

2)查看与Execl相关的变量在关闭和释放的时候顺序是否正确。比如,要先使用Close(),后使用ReleaseDispatch。

该解决方法总结于[vc excel Quit 无法关闭excel进程,急啊!!!!!](http://bbs.csdn.net/topics/390039312?page=1#post-395362721)

时间: 2024-10-19 02:17:52

MFC中使用App.Quit();无法退出Excel表格的解决方法的相关文章

asp.net 导出excel 中文乱码解决方法 (转)

用我转载的上一篇文章 Asp.net中把DataTable或DataGrid导出为Excel 导出的文档,中文有乱码现象,其实要解决中文乱码很简单,设置一下字符集.如下: // 设置编码和附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312&

Eclipse中输入变量会自动补全上屏的解决方法

我自己在启动Eclipse代码补全后输入感觉确实爽多了,但是每次输入变量后一按下空格,编译器会自己帮你写一个很蛋疼的名字,比如你输入了:String mStr后按下空格,它就变成了mString,十分讨厌.下面是正规的解决办法,但是经过我反复折腾,我实在没办法把插件的源码显示到工程中.于是偷个懒去网上下载了已经修改好的jar包,成功搞定. 我自己复制jar包的目录是:D:\Work Appliactions\adt-bundle-windows-x86-20140702\eclipse\plug

VMware ESXi中不能显示CPU及内存使用情况的解决方法

今天一个网友问我,他管理的机房有4台ESXi 5.1的服务器,其中三台ESXi Server不能显示各个虚拟机占用的CPU.内存情况了,如图1-1所示. 图1-1在"虚拟机"选项卡中不能显示每个启动虚拟机的资源占用情况 另外,在VMware ESXi的"摘要"中,CPU与内存的使用情况也统计出错,如图1-2所示. 图1-2 摘要统计出错 在出现这个问题时,各个ESXi Server上的虚拟机可以正常启动.关闭,并且各虚拟机运行的系统及应用不受影响. 从上面两个图我看

pentaho中Invalid byte 3 of 3-byte UTF-8 sequence的解决方法

今天在创建数据源的时候报了这么一个错 Invalid byte 3 of 3-byte UTF-8 sequence. 上网一查,说是有中文,字体不相符,可是我没有写中文,为了能继续往后进行,修改了如下文件 在start-pentaho.bat中添加了一句代码 修改前 IF "%BITS%" == "64" ( set CATALINA_OPTS=-Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Dsun.rmi.dgc.clien

Asp.net导出Excel乱码的解决方法

通过跟踪Asp.net服务器代码,没有乱码,然而导出Excel到浏览器后,打开时出现乱码. 解决方法是添加编码格式的前缀字节码:Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); ? 1 2 3 4 5 6 7 8 9 10 11 12 13 Response.Clear(); Response.AddHeader("content-disposition","attachment;filenam

VS2008运行MFC程序,提示microsoft incremental linker已停止工作解决方法

其实这边是因为设置有问题,具体的解决方案如下: 第一步:点击项目->"你的文件"属性->配置属性->链接器->启用增量链接   将  是(/INCREMENTAL)改为 否(/INCREMENTAL:NO) 第二步:点击项目->"你的文件"属性->配置属性->C/C++  将调试信息格式改为程序数据库(/Zi) 改完之后,重新调试一下程序,是不是问题已经解决了? 以下附上截图: VS2008运行MFC程序,提示microso

VS2010在64位系统中连接64位Oracle出现的问题和解决方法

C#使用System.Data.OracleClient连接Oracle数据库.我的是window7/64位系统,装了一个64位的oralce 11G r2 客户端是64位的 用VS10调试错误信息如下: 尝试加载Oracle客户端库时引发BadImageFomatException.如果在安装64位Oracle客户端组件的情况下以32位模式运行,将出现此问题. 错误原因是VS调试工具是32位,连接的程序所用的OracleClient也是64位的,从而导致兼容问题.当然,如果在64位操作系统上按

PHP Excel表格导出图片方法

1.进入PHP Excel官网后,找到右边的download按钮,下载,下载完成的是一个压缩文件,解压放到你的项目目录里. 2.查看解压文件是否有PHPExcel_Worksheet_Drawing图片文件类. 3.创建一个excel.php文件,开始编写PHP Excel到出. 实例代码: <?php /** * PHP Excel表格导出图片方法 * 2015-07-30 巴亚云 */ function ExcelCustomers(){ /*引入phpexcel核心类文件*/ includ

C++中的字符数组逐个赋值时报错的解决方法

C++中的字符数组逐个赋值时报错的解决方法 C++中定义一个字符数组的时候,如果初始化,则cout的时候不会出错,但是在逐个字符赋值的时候,很容易出错. #include<iostream> #include<string> using namespace std; int main() { //char s[100] = "china"; char s[100]; s[0]='c'; s[1]='n'; s[2]='\0'; cout<<s<