`
小抽又回来了
  • 浏览: 11060 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

word转pdf时 Can't map name to dispid: Open

阅读更多

 

 com.jacob.com.ComFailException: Can't map name to dispid: Open

 

这种异常是因为操作完成后,没有调用ComThread.Release()去释放jacob

 

java.lang.IllegalStateException: Dispatch not hooked to windows memory

这种异常有可能是多次调用了ComThread.Release();而引起的。

 

但我今天碰到这种异常,却不是这样,在初始化jacob所需的对象的时候,会做一个判断:

 

if (word == null) {

    word = new ActiveXComponent("Word.Application");

    word.setProperty("Visible", new Variant(false));

    word.setProperty("DisplayAlerts", new Variant(false));

   }

   if (documents == null) {

    documents = word.getProperty("Documents").toDispatch();

   }

 

这里的word和documents是Dispatch类型。

 

然后每次操作完成后都会调用ComThread.Release()去释放,但释放后word和documents并不为null,所以每次使用jacob都只有第一次是正常的,后面就要报错,然后必须重启tomcat才行。

 

问题就出在初始化的判断上了,要这样写:

 

if (word == null||word.m_pDispatch==0) {

    word = new ActiveXComponent("Word.Application");

    word.setProperty("Visible", new Variant(false));

    word.setProperty("DisplayAlerts", new Variant(false));

   }

   if (documents == null||documents.m_pDispatch==0) {

    documents = word.getProperty("Documents").toDispatch();

   }

 

这样可以正常初始化jacob,后面的操作也不会报异常了。

 

原文链接:https://blog.csdn.net/ooxxooxx123/article/details/84653770

分享到:
评论

相关推荐

    jacob调用OCX控件总结

    本文主要介绍了三种方法,以及如何解决在使用Jacob时遇到的`ComFailException 8000FFFF`错误。 首先,我们来看三种调用OCX控件的方法: 1. **JNI (Java Native Interface)**:直接通过JNI调用OCX控件是最直接的...

    DispID-v1-3.pdf

    DisplayID是VESA(Video Electronics Standards Association)推出的一种标准,用于定义显示设备配置信息的数据格式。这个标准的目的是简化并优化视频接口和图像信号的设置,使得显示设备能够实现即插即用的功能,...

    利用word进行打印

    COleVariant varFileName(_T("C:\\path\\to\\document.docx")); // 文件路径 wordApp.GetActiveObject("Word.Document", TRUE); // 如果已经打开则获取,否则创建新文档 wordApp.pDispatch->Invoke([=](DISPID ...

    MFC有关word所有操作

    使用`COleDispatchDriver`的`InvokeHelper`函数,可以通过其Dispatch ID (DISPID)调用Word的COM接口方法,例如打开(`Open`)和保存(`SaveAs`)文档。 5. **创建新文档**: 可以通过调用Word的`Documents.Add`方法...

    vc开发的操作word2000的代码实例,用vc打开word文档,主要是出了带表格的word文档。

    在VC++ 2003环境下,开发对Word 2000的接口操作是一项常见的任务,这通常涉及到Microsoft Office的自动化(Automation)技术。在这个特定的代码实例中,我们聚焦于如何使用C++来打开并操作包含表格的Word文档,特别...

    VC 6.0动态生成Word表格

    - 在窗口的初始化函数(如`OnCreate`)中,使用`m_wordApp.CreateDispatch(_T("Word.Application"))`来创建并激活Word对象。 4. **动态生成表格**: - 首先,我们需要获取Word的`Documents`集合,然后使用`Add`...

    VC中把文字内容存成word文件把doc文件保存为txt格式

    例如,`dispid_Docs`代表`Application`对象的`Documents`属性,`dispid_DocsAdd`表示`Documents`集合的`Add`方法,`dispid_Sel`代表`Application`对象的`Selection`属性,`dispid_TypeText`和`dispid_TypePara`分别...

    vc操作word.txt

    在进行办公自动化处理时,我们经常需要使用程序来控制 Word 文档的创建、编辑及保存等操作。本篇将详细介绍如何利用 VC++ 通过 COM 接口来实现对 Word 文档的操作,包括打开、编辑、保存以及另存为等功能。 #### 二...

    VC6.0中利用word实现报表功能

    ### VC6.0中利用Word实现报表功能 在软件开发领域,特别是在企业级应用中,报表功能是非常重要的组成部分之一。它能够帮助用户更好地理解和分析数据,进而做出更准确的决策。Visual C++ 6.0(简称VC6.0)作为一款...

    VC/MFC加载google map

    GetDlgItem(IDC_WEBBROWSER1)->Invoke DISPID_REFRESH, VT_EMPTY, NULL, (LPDISPATCH)&jsCode, NULL, NULL); } ``` 在HTML页面中,定义对应的`MapSetCenter`函数: ```javascript function MapSetCenter(lat, lng...

    C++实现WebBrowser控件中获取鼠标点击事件和超链接

    STDMETHODIMP CMyView::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) { if (dispIdMember == ...

    TeeChart Pro Activex Control v2018

    property has been name changed to aSeries, retaining its DispId to support existing compiled applications. 2. The following is handled automatically if you import the TeeChart classes. For ...

    TeeChart2018ActiveX_0_2_9Eval3264

    property has been name changed to aSeries, retaining its DispId to support existing compiled applications. 2. The following is handled automatically if you import the TeeChart classes. For ...

    ATL实现的CDHtmlDialog模板类

    T("elementid1"), OnClick) DHTML_EVENT_ONMOUSEMOVE(_T("elementid2"), OnMouseMove) DHTML_EVENT_ELEMENT(DISPID_HTMLELEMENTEVENTS_ONMOUSEOVER, _T("elementid"), OnMouseOver) // id为elementid的...

    dsoframer v2.3.0.0

    [id(DSOF_DISPID_WORD_DocumentChange), helpstring("DSOF_DISPID_WORD_DocumentChange")] HRESULT WORD_DocumentChange(); [id(DSOF_DISPID_WORD_DocumentBeforePrint), helpstring("DSOF_DISPID_WORD_...

    VC6.0编写的自定义WORD工具栏

    本项目"VC6.0编写的自定义WORD工具栏"就是这样一个示例,它展示了如何为Word添加自定义功能,例如增加自定义按钮,并处理这些按钮的点击事件。 COM是微软提出的一种二进制标准,它允许不同编程语言和不同操作系统...

    stdafx.h代码

    // This source code is only intended as a supplement to the // Microsoft Foundation Classes Reference and related // electronic documentation provided with the library. // See these sources for ...

    TeeChart Pro Activex Control v5

    renamed to aSeries but retains its DispId to support existing, non-changed code and already compiled applications. When upgrading VC++ classes to the latest version it should suffice in all ...

    LPDISPATCH类型的接属性值,方法

    它是一个指向`IDispatch`接口的指针,该接口提供了访问对象的属性和方法的途径,特别是对于那些在运行时类型信息(RTTI)不可用的环境。`LPDISPATCH`是`IDispatch*`的typedef,通常在自动化服务器和脚本环境中使用,...

    delphi编译错误.txt

    50. **Dispid `<number>` already used by `<name>`** - **含义**: DISPID 标识号已被 `<name>` 使用。 - **解决办法**: 更改 DISPID 值或确保唯一性。 51. **Dispid clause only allowed in OLE automation ...

Global site tag (gtag.js) - Google Analytics