• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 用OLE打开EXCEL进行读取,然后也用了ReleaseDispatch,可是发现EXCEL在进程中释放不掉:(

用OLE打开EXCEL进行读取,然后也用了ReleaseDispatch,可是发现EXCEL在进程中释放不掉:(

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了用OLE打开EXCEL进行读取,然后也用了ReleaseDispatch,可是发现EXCEL在进程中释放不掉:(等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 用OLE打开EXCEL进行读取,然后也用了ReleaseDispatch,可是发现EXCEL在进程中释放不掉:(
描述:

range.ReleaseDispatch();
workSheet.ReleaseDispatch();
workSheets.ReleaseDispatch();
workBook.ReleaseDispatch();
workBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
我用了上面的代码,可就是释放不掉:(
static char BASED_CODE szFilter[] = 
"Excel Files (*.xls)|*.xls|All Files (*.*)|*.*||";
CFileDialog dlg(true,"xls",NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,this);
;
if ( dlg.DoModal() == IDOK )
{
_Application ExcelApp;
Workbooks    workBooks;
_Workbook  workBook;
Worksheets   workSheets;
_Worksheet   workSheet;
Range  range;
COleException *e = new COleException;
try
{
if ( !ExcelApp.CreateDispatch("Excel.Application",e) )
{
// AfxMessageBox("创建Excel服务失败!"); 
// exit(1);
throw e;
}
}
catch ( COleDispatchException *e)
{
CString cStr;
      if (!e->m_strSource.IsEmpty())
         cStr = e->m_strSource + " - ";
      if (!e->m_strDescription.IsEmpty())
         cStr += e->m_strDescription;
      else
         cStr += "unknown error";
      AfxMessageBox(cStr, MB_OK, 
         (e->m_strHelpFile.IsEmpty())? 0:e->m_dwHelpContext);
      e->Delete();
   }
  catch (CException *e) 
   {
      TRACE("%s(%d): OLE Execption caught: SCODE = %x", 
         __FILE__, __LINE__, COleException::Process(e));
      e->Delete();
   }
workBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
workBook.AttachDispatch( workBooks.Add( 
_variant_t(dlg.GetPathName())));
workSheets.AttachDispatch( workBook.GetWorksheets());
workSheet.AttachDispatch( workSheets.GetItem(
_variant_t("sheet1")),true);
range.AttachDispatch( workSheet.GetCells(),true);
// ExcelApp.SetVisible(true);
_variant_t vData;
vData = range.GetItem(_variant_t(long(1)),
_variant_t(long(1)));
COleVariant temp;
int i = 2;
CString strVal;
CString str1;
char cCol;
for ( ; ; )
{
Range r;
cCol = 'A';
pid->arrStrItem = new LPTSTR[7];
str1.Format("A%d",i);
r = workSheet.GetRange(COleVariant(str1),vtMissing);
temp = r.GetValue();
strVal = (LPCTSTR)_bstr_t(temp);
if ( strVal == "" )
break;
pid->arrStrItem[0] = new char(strVal.GetLength()+1);
strcpy(pid->arrStrItem[0], strVal);
m_lstCallLogs.InsertItem(i-2,pid->arrStrItem[0]);
LV_ITEM lvitem;
lvitem.iItem = i-2;
lvitem.mask = LVIF_TEXT;
for ( int iCol = 1; iCol <= 6; iCol++ )
{
lvitem.iSubItem = iCol;
cCol += 1;
str1.Format("%c%d",cCol,i);
r = workSheet.GetRange(COleVariant(str1),vtMissing);
temp = r.GetValue();
if ( temp.vt != VT_BSTR )
{
HRESULT hr=::VariantChangeType(&temp,&temp,
VARIANT_NOUSEROVERRIDE|VARIANT_LOCALBOOL,VT_BSTR);
}
strVal=(LPCTSTR)_bstr_t(temp);
if ( strVal == "")
break;
pid->arrStrItem[iCol] = new char(strVal.GetLength() + 1);
strcpy(pid->arrStrItem[iCol], strVal);
lvitem.pszText = pid->arrStrItem[iCol];
m_lstCallLogs.SetItem(&lvitem);
}
// m_lstCallLogs.SetItemData
// ( i-2,reinterpret_cast<DWORD>(pid) );
i++;
}
// workBook.Save();
range.ReleaseDispatch();
workSheet.ReleaseDispatch();
workSheets.ReleaseDispatch();
workBook.ReleaseDispatch();
workBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用OLE打开EXCEL进行读取,然后也用了ReleaseDispatch,可是发现EXCEL在进程中释放不掉:(

相关文章

  • 2017-06-05 异常?unhandleexceptionMFCO42DDLL
  • 2017-06-05 如何注册COM组件
  • 2017-06-04 directshow组建注册问题
  • 2017-06-05 用mfc写了个activeX控件,用js调用后,为什么直接双击打开功能就可以实现,而放在apache上就不能用?跪求大神帮忙
  • 2017-06-04 关于如何使用这个RegCreateKeyEx函数????
  • 2017-06-05 CMutex类本身就有lock\UnLock函数,为什么多此一举使用CSingleLock
  • 2017-06-04 MMC编程
  • 2017-06-04 在VB调试环境下不能触发ATLCOM事件
  • 2017-06-04 VCmapX中画点、画线的问题
  • 2017-06-05 编译时的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何对Dll文件进行加密(菜鸟)?
    • IDispatch接口问题
    • 多线程运用请大神指点
    • 8848com高薪诚聘VC/MFC程序员
    • 数组在临界区的使用
    • 关于winspooldll,哪位大侠帮帮忙?
    • DispEventUnadvise访问不明确?
    • 手动添加连接点
    • 求教ado连接MFC和SQLServer
    • 关于如何生成一个可以保存用户提交数据的组件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有