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

1天奋战,Jacob解析word

    博客分类:
  • JAVA
阅读更多

  由于项目需要,取得word的内容,因研究了下Jacob,尽管POI也能解析word,但我觉得Jacob还是好些(注:Jacob好像不能在Linux下用)昨天下午看了看Jacob的源码,今天上午终于把word的表格给搞定了(速度有点小慢,不过没关系,慢慢来)。下面来和大家分享下我的快乐:

首先需要下载jacob,去官网http://sourceforge.net,下载后,需要把jacob.dll放到windows目录的system32下,把jacob.jar Copy到lib下就OK, 我用的工具是Myeclipse6.

  接着我们看下打开word,嘿嘿o('_')o
 
  import com.jacob.com.Dispatch;
  import com.jacob.com.Variant;
//import com.jacob.com.ComThread;这个先不用
  import com.jacob.activeX.ActiveXComponent;
  public class Test
  {
    private ActiveXComponent app=null;
	private Dispatch doc=null;
	private Dispatch docs=null;
	private Dispatch wcontent=null;
         	public boolean openWord(String wordPath)
	{
		boolean isOpen=true;
		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[]{wordPath, new Variant(false), new Variant(true)} , new int[1]).toDispatch(); //打开word文件  
			wcontent = Dispatch.get(doc, "Content").toDispatch(); 					// 取得word文件的内容		
		}
		catch(Exception e)
		{
			isOpen=false;
		}
		finally
		{
			
		}
		return isOpen;
	}
  }

上面的方法,你只需要传递word文件所在的目录就OK,下面再看看得到表格的内容的一个方法:
	/**
	 * 得到第X个表格的第N行第M列的内容
	 * @param tableNum	第几个表格
	 * @param row		第N行
	 * @param col		第M列
	 * @param tables	表格对象
	 * @return
	 */
public  String table(int tableNum,int row,int col,Dispatch tables)
{
	String tempText = "";				//获得表格的内容
	try
	{
		int tableCount = getTablesCount(tables);			//获取文档中表格总数
		if(tableCount > 0)                                     		//判断文档中是否存在表格
		{
			if(tableNum<=tableCount)         		//判断所查表格序号是否超过文档表格总数
			{	
				//得到第X个表格的对象
				Dispatch table = Dispatch.call(tables, "Item", new Variant(tableNum)).toDispatch();						//得到第X个表格对象的行
				Dispatch rows = Dispatch.call(table,"Rows").toDispatch();									//获取当前表格的行数
				int rowCount = Dispatch.get(rows,"Count").getInt();								
				if(row <=rowCount)
				{
			Dispatch  cell = Dispatch.call(table, "Cell", new Variant(row),new Variant(col)).toDispatch();
					Dispatch  rangeCell = Dispatch.call(cell,"Range").toDispatch();
					tempText = Dispatch.get(rangeCell,"Text").getString();	//得到所查找的表格内容	
					tempText="0#"+tempText;
				}
				else
				{
					tempText = "1#所查的行号不存在";																	
				}
			}
			else
			{
				tempText = "2#所查的表格不存在"; 			
			}
		}
	}
	catch(Exception e)
	{
		tempText="3#所查的表格列不存在";
	}
	return tempText;
}

嘿嘿,才入道,慢慢学习,希望给和我一样的朋友一点小小帮助o(^_^)o
分享到:
评论
3 楼 body77 2010-12-15  
getTablesCount 这个方法没有?
2 楼 ypluck 2008-12-29  
表格里面嵌入表格,你把他看成一个表格,查下有多少行与列就可以了,有问题请加QQ:275321130,一起学习
1 楼 hbing110 2008-12-29  
有个问题请教一下,如在表格的第三行,第二列里面又是一个表格,这时我想在这个内嵌表格里面写入数据,应该怎么做呢?
我的msn:hbing110@hotmail.com

相关推荐

Global site tag (gtag.js) - Google Analytics