package com.eeplat.action.zidingyi;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class MSWordManager {
// word文档
private Dispatch doc;
// word运行程序对象
private ActiveXComponent word;
// 所有word文档集合
private Dispatch documents;
// 选定的范围或插入点
private Dispatch selection;
private boolean saveOnExit = true;
/** *//**
*
* @param visible 为true表示word应用程序可见
*/
public MSWordManager(boolean visible){
if(word== null){
word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(visible));
}
if(documents == null){
documents = word.getProperty("Documents").toDispatch();
}
}
/*
* 设置退出时参数
*
* @param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件
*/
public void setSaveOnExit(boolean saveOnExit){
this.saveOnExit = saveOnExit;
}
/*
* 创建一个新的word文档
*
*/
public void createNewDocument(){
doc = Dispatch.call(documents,"Add").toDispatch();
selection = Dispatch.get(word,"Selection").toDispatch();
}
/*
* 打开一个已存在的文档
*
* @param docPath
*/
public void openDocument(String docPath){
closeDocument();
doc = Dispatch.call(documents,"Open", docPath).toDispatch();
selection = Dispatch.get(word, "Selection").toDispatch();
}
/** *//**
* 把选定的内容或插入点向上移动
*
* @param pos 移动的距离
*/
public void moveUp(int pos){
if(selection == null){
selection = Dispatch.get(word, "Selection").toDispatch();
for(int i = 0 ;i<pos;i++){
Dispatch.call(selection,"MoveUp");
}
}
}
/*
* 把选定的内容或者插入点向下移动
*
* @param pos 移动的距离
*/
public void moveDown(int pos){
if(selection == null){
selection = Dispatch.get(word, "Selection").toDispatch();
for(int i =0;i<pos;i++){
Dispatch.call(selection,"MoveDown");
}
}
}
/** *//**
* 从选定内容或插入点开始查找文本
*
* @param toFindText 要查找的文本
* @return boolean true-查找到并选中该文本,false-未查找到文本
*/
public boolean find(String toFindText){
if(toFindText == null|| toFindText.equals("")){
return false;
}
//从selection 所在位置开始查询
Dispatch find = word.call(selection,"Find").toDispatch();
//设置要查询的内容
Dispatch.put(find, "Text", toFindText);
//向前查找
Dispatch.put(find, "Forward", "True");
//设置格式
Dispatch.put(find, "Format", "True");
//大小写匹配
Dispatch.put(find, "MatchCase", "True");
//全字匹配
Dispatch.put(find, "MatchWholeWord", "True");
return Dispatch.call(find, "Execute").getBoolean();
}
/** *//**
* 把选定选定内容设定为替换文本
*
* @param toFindText 查找字符串
* @param newText 要替换的内容
* @return
*/
public boolean replaceText(String toFindText,String newText){
if(!find(toFindText)){
return false;
}
Dispatch.put(selection,"Text", newText);
return true;
}
/** *//**
* 全局替换文本
*
* @param toFindText 查找字符串
* @param newText 要替换的内容
*/
public void replaceAllText(String toFindText,String newText){
while(find(toFindText)){
Dispatch.put(selection, "Text", newText);
Dispatch.call(selection,"MoveRight");
}
}
/** *//**
* 在当前插入点插入字符串
*
* @param newText 要插入的新字符串
*/
public void insertText(String newText){
Dispatch.put(selection, "Text", newText);
}
/** *//**
*
* @param toFindText 要查找的字符串
* @param imagePath 图片路径
* @return
*/
public boolean replaceImage(String toFindText,String imagePath){
if(!find(toFindText)){
return false;
}
Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(), "AddPicture",imagePath);
return true;
}
/*
* 全局替换图片
*
* @param toFindText 查找字符串
* @param imagePath 图片路径
*/
public void replaceAllImage(String toFindText,String imagePath){
while(find(toFindText)){
Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture",imagePath);
Dispatch.call(selection,"MoveRight");
}
}
/** *//**
* 在当前插入点插入图片
*
* @param imagePath 图片路径
*/
public void insertImage(String imagePath){
Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(), "AddPicture",imagePath);
}
/** *//**
* 在当前文档指定的位置拷贝来自另一个文档中的段落
*
* @param anotherDocPath 另一个文档的磁盘路径
* @param tableIndex 被拷贝的段落在另一格文档中的序号(从1开始)
* @param pos 当前文档指定的位置
*/
public void copyParagraphFromAnotherDoc(String anotherDocPath,
int paragraphIndex, String pos) {
Dispatch doc2 = null;
try {
doc2 = Dispatch.call(documents, "Open", anotherDocPath) .toDispatch();
Dispatch paragraphs = Dispatch.get(doc2, "Paragraphs").toDispatch();
Dispatch paragraph = Dispatch.call(paragraphs, "Item", new Variant(paragraphIndex)).toDispatch();
Dispatch range = Dispatch.get(paragraph, "Range").toDispatch();
Dispatch.call(range, "Copy");
if (this.find(pos)) {
Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
Dispatch.call(textRange, "Paste"); }
} catch (Exception e) {
e.printStackTrace();
} finally {
if (doc2 != null) {
Dispatch.call(doc2, "Close", new Variant(saveOnExit));
doc2 = null; }
}
}
public void closeDocument(){
if(doc != null){
Dispatch.call(doc, "Save");
Dispatch.call(doc, "Close",new Variant(saveOnExit));
doc = null;
}
}
}
Java调用Java2word的时候需要自己搞个方法关闭WinWOrd
public void closeWinWord(){
if (word != null) {
Dispatch.call(word, "Quit");
word = null;
}
}