日期:2014-05-17  浏览次数:20702 次

Jacob替换Word标签及转成Html等简单应用

此内容仅支持Window系统?jacob-1.15-M4-x86.dll

?

一、一般应用于使用Word模版中的标签进行内容替换

?

?

String templetPath = ""; //模版文件
String otPath = ""; //保存文件
GF_JacobUtil word = new GF_JacobUtil();
try {
    //是否显示打开word
	word.openWord(false);
    //打开模版文件
	word.openDocument(templetPath);
    //替换书签内容
	word.replaceBookMark("Prj_Name", "项目");
    //保存到path
	word.saveFileAs(otPath );
} catch (Exception ex) {
	ex.printStackTrace();
} finally {
    //关闭Word
	word.closeDocument();
	word.closeWord();
}

? ? 这个是网上前人总结的一个工具类,稍微修改

?

import java.util.ArrayList;
import java.util.List;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class GF_JacobUtil {

	// 建立一個word物件
	private ActiveXComponent MsWordApp = null;

	// 建立兩個word組件
	private Dispatch document = null;

	// selection插入点
	private Dispatch selection = null;

	// content是word的文档内容
	private Dispatch content;

	// repalceStr是word的替换对象
	private Dispatch repalceStr;

	// 建構子
	public GF_JacobUtil() {
		super();
	}

	/**
	 * 開啟word檔案
	 * 
	 * @param makeVisible
	 *            顯示不顯示(true:顯示;false:不顯示)
	 * 
	 */
	public void openWord(boolean makeVisible) {

		// 启动com的线程
		ComThread.InitSTA();
		// 打開word(如果word未開啟時)
		if (MsWordApp == null) {
			MsWordApp = new ActiveXComponent("Word.Application");
		}

		// 設置word是可見或不可見(true:顯示;false:不顯示)
		Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible));
	}

	/**
	 * 建立word的文本內容
	 * 
	 */
	public void createNewDocument() {
		// 建立一個Dispatch物件
		Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
		document = Dispatch.call(documents, "Add").toDispatch();
		selection = MsWordApp.getProperty("Selection").toDispatch();
	}

	/**
	 * 打开文件
	 * 
	 * @param inputDoc
	 *            要打开的文件,全路径
	 * @return Dispatch 打开的文件
	 */
	public void openDocument(String inputDoc) {

		// 建立一個Dispatch物件
		Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
		document = Dispatch.call(documents, "Open", inputDoc).toDispatch();
		selection = MsWordApp.getProperty("Selection").toDispatch();

	}

	/**
	 * 选定内容
	 * 
	 * @return Dispatch 选定的范围或插入点
	 */
	public Dispatch select() {
		return MsWordApp.getProperty("Selection").toDispatch();
	}

	/**
	 * 把选定内容或插入点向上移动
	 * 
	 * @param selection
	 *            要移动的内容
	 * @param count
	 *            移动的距离
	 */
	public void moveUp(Dispatch selection, int count) {
		for (int i = 0; i < count; i++)
			Dispatch.call(selection, "MoveUp");
	}

	/**
	 * 把选定内容或插入点向下移动
	 * 
	 * @param selection
	 *            要移动的内容
	 * @param count
	 *            移动的距离
	 */
	public void moveDown(Dispatch selection, int count) {
		for (int i = 0; i < count; i++)
			Dispatch.call(selection, "MoveDown");
	}

	/**
	 * 把选定内容或插入点向左移动
	 * 
	 * @param selection
	 *            要移动的内容
	 * @param count
	 *            移动的距离
	 */
	public void moveLeft(Dispatch selection, int count) {
		for (int i = 0; i < count; i++)
			Dispatch.call(selection, "MoveLeft");
	}

	/**
	 * 把选定内容或插入点向右移动
	 * 
	 * @param selection
	 *            要移动的内容
	 * @param count
	 *            移动的距离
	 */
	public void moveRight(Dispatch selection, int count) {
		for (int i = 0; i < count; i++)
			Dispatch.call(selection, "MoveRight");
	}

	/**
	 * 把插入点移动到文件首位置
	 * 
	 * @param selection
	 *            插入点
	 */
	public void moveStart(Dispatch selection) {
		Dispatch.call(selection, "HomeKey", new Variant(6));
	}

	/**
	 * 从选定内容或插入点开始查找文本
	 * 
	 * @param selection
	 *            选定内容
	 * @param toFindText
	 *            要查找的文本
	 * @return boolean true-查找到并选中该文本,false-未查找到文本
	 */
	public boolean find(Dispatch selection, String toFindText) {
		// 从selection所在位置开始查询
		Dispatch find = Dispatch.call(selection, "Find").toDispatch();
		// 设置要查找的内容
		Dispatch.put(find, "Text", toFindText);
		// 向前查找
		Dispatch.put(find, "Forward", "True");
		// 设置