本文介绍: 1、最low的方式:强制结束进程这种方式简单粗暴,但会存在进程安全问题,及可能引起数据丢失,慎用!!!!2、释放顺序问题与Execl相关的变量在关闭和释放的时候顺序必须正确。比如,要先使用Close(),后使用ReleaseDispatch。顺序尽量做到先 Save—>Colse—>Release;在Release时,我们尽量做到由内到外,Rang—>Sheet—>Sheets—>Book—>Books—>App。
先说处理方式
1、最low的方式:强制结束进程
这种方式简单粗暴,但会存在进程安全问题,及可能引起数据丢失,慎用!!!!
2、释放顺序问题
与Execl相关的变量在关闭和释放的时候顺序必须正确。比如,要先使用Close(),后使用ReleaseDispatch。
顺序尽量做到先 Save—>Colse—>Release;
在Release时,我们尽量做到由内到外,Rang—>Sheet—>Sheets—>Book—>Books—>App
注:在app退出时,一定要注意顺序,是先Quit退出,再Release,如果先Release,将无法退出,即Quit—>Release。
3、正确释放资源
当我们操作excel后,如果没有正确释放资源,导致进程被占用,那我们就无法退出进程。
下面我们就来讨论下,如何正确释放资源,使得进程最后正常释放退出。
注:与Execl相关的变量必须全部都要释放ReleaseDispatch。
哪些情况下资源需要释放,那又如何正确释放这些资源
在调用get_Item后,需要释放
1、CWorkbooks对象对get_Item调用后,无法释放
通过CWorkbooks对象调用get_Item接口后,如果不释放,会出现进程无法退出情况,如下使用后,可能会存在进程无法退出问题。
解决方案:
对于方案一,需要注意的是,如果lpSheets变量AttachDispatch给其他变量,那要注意释放位置,否则会导致后续使用报错,如下列代码中会在range.AttachDispatch(sheet.get_UsedRange());
处报错,原因就是前面释放位置不对。
2、CRange对象对get_Item调用后,无法释放
为什么AttachDispatch后就不需要去手动释放了?
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。