`
ypluck
  • 浏览: 77539 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JACOB解析WORD的理解

    博客分类:
  • JAVA
阅读更多
最近因一个项目需要通过上传后解析WORD里面的TABLE,弄的我焦头烂额。。。

一。先说说ComThread.InitMTA(true)和ComThread.InitMTA()的区别吧,看上去这两个方法的使用是一样的,但实际上还是不一样。我的英语不是很好,从文章上面我的理解是:前者实际上是执行一个主的单线程(Main InitSTA)。而后者在用的时候,需要先启用ComThread.startMainSTA();这两者的用法大概就是:
Thread 1:
ComThread.InitMTA(true); // a true tells JACOB to create a Main STA
...
...
ComThread.Release();
...
Thread 2:
ComThread.InitMTA();
...
...
ComThread.Release();
...
...
ComThread.quitMainSTA();

而后者的用法是:
ComThread.startMainSTA();
...
...
Thread 1:
ComThread.InitMTA();
...
...
ComThread.Release();
...
Thread 2:
ComThread.InitMTA();
...
...
ComThread.Release();
...
...
ComThread.quitMainSTA();

二。ComThread这个线程的资源JVM是回收不了的,所以在用完的时候一定要像C++一样,随用随释放。在这个系统中我就犯了一个错误,没有释放,结果导致一个功能只能用一次,其他的都用不了,呵呵,不过第一次接触这东西,虽说很老的东西了,不过用上去感觉还不错。

三。解析WORD
try
{
   app= new ActiveXComponent("Word.Application"); //启动word, 生成 一个ActiveXComponent 对象
app.setProperty("Visible", new Variant(false)); //设置文档可见性
docs = app.getProperty("Documents").toDispatch();      //获得document对象
doc = Dispatch.invoke(docs, "Open", Dispatch.Method,
new Object[]{filePath, new Variant(false), new Variant(true)} , new int[1]).toDispatch(); //打开word文件 
wordContent = Dispatch.get(doc, "Content").toDispatch(); // 取得word文件的内容

}
catch(Exception e)
{
   // closeWord();//此方法需要自己写
}
finally
{
   closeWord();//此方法需要自己写
}


public void closeWord() //关闭文档
{
try
{
Dispatch.call(doc,"close",new Variant(false)); //false表示关闭时,不保存文档; true 关闭时保存文档
}
catch(Exception e){ }
finally
{
try
{
app.invoke("Quit", new Variant[] {}); //退出word application对象
}
catch(Exception e)
{
System.out.println("退出时出错");
}
}
}


四。以上纯属于自己用的体验,只能给大家看看,不对的地方请大家指出来,谢谢
2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics