http://wang-ping001.iteye.com/blog/1452057

——————————————————————————————————————————————————————————

/**
*
*/
package com.xaeds.taecs.common.util; import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant; /**
* @author Administrator
*
*/
public class WordBean { // word文档
private Dispatch doc; // word运行程序对象
private ActiveXComponent word; // 所有word文档集合
private Dispatch documents; // 选定的范围或插入点
private Dispatch selection; private boolean saveOnExit = true; public WordBean(boolean visible) throws Exception {
if (word == null) {
word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(visible)); // 不可见打开word
word.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏
}
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 docPath
* -文件全名
* @param pwd
* -密码
*/
public void openDocumentOnlyRead(String docPath, String pwd)
throws Exception {
closeDocument();
doc = Dispatch.callN(
documents,
"Open",
new Object[] { docPath, new Variant(false), new Variant(true),
new Variant(true), pwd, "", new Variant(false) })
.toDispatch();
selection = Dispatch.get(word, "Selection").toDispatch();
} public void openDocument(String docPath, String pwd) throws Exception {
closeDocument();
doc = Dispatch.callN(
documents,
"Open",
new Object[] { docPath, new Variant(false), new Variant(false),
new Variant(true), pwd }).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 pos
* 移动的距离
*/
public void moveLeft(int pos) {
if (selection == null)
selection = Dispatch.get(word, "Selection").toDispatch();
for (int i = 0; i < pos; i++) {
Dispatch.call(selection, "MoveLeft");
}
} /**
* 把选定的内容或者插入点向右移动
*
* @param pos
* 移动的距离
*/
public void moveRight(int pos) {
if (selection == null)
selection = Dispatch.get(word, "Selection").toDispatch();
for (int i = 0; i < pos; i++)
Dispatch.call(selection, "MoveRight");
} /**
* 把插入点移动到文件首位置
*
*/
public void moveStart() {
if (selection == null)
selection = Dispatch.get(word, "Selection").toDispatch();
Dispatch.call(selection, "HomeKey", new Variant(6));
}
public void enterStart(){
if (selection == null)
selection = Dispatch.get(word, "Selection").toDispatch();
Dispatch.call(selection, "TypeParagraph");
}
/**
* 从选定内容或插入点开始查找文本
*
* @param toFindText
* 要查找的文本
* @return boolean true-查找到并选中该文本,false-未查找到文本
*/
@SuppressWarnings("static-access")
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 fstCellRowIndex
* 第一个单元格的行索引
* @param fstCellColIndex
* 第一个单元格的列索引
* @param secCellRowIndex
* 第二个单元格的行索引
* @param secCellColIndex
* 第二个单元格的列索引
*/
public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,
int secCellRowIdx, int secCellColIdx) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
Dispatch fstCell = Dispatch.call(table, "Cell",
new Variant(fstCellRowIdx), new Variant(fstCellColIdx))
.toDispatch();
Dispatch secCell = Dispatch.call(table, "Cell",
new Variant(secCellRowIdx), new Variant(secCellColIdx))
.toDispatch();
Dispatch.call(fstCell, "Merge", secCell);
} /**
* 在指定的单元格里填写数据
*
* @param tableIndex
* @param cellRowIdx
* @param cellColIdx
* @param txt
*/
public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
String txt) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
new Variant(cellColIdx)).toDispatch();
Dispatch.call(cell, "Select");
Dispatch.put(selection, "Text", txt);
} /**
* 获得指定的单元格里数据
*
* @param tableIndex
* @param cellRowIdx
* @param cellColIdx
* @return
*/
public String getTxtFromCell(int tableIndex, int cellRowIdx, int cellColIdx) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
new Variant(cellColIdx)).toDispatch();
Dispatch.call(cell, "Select");
String ret = "";
ret = Dispatch.get(selection, "Text").toString();
ret = ret.substring(0, ret.length() - 1); // 去掉最后的回车符;
return ret;
} /**
* 在当前文档拷贝剪贴板数据
*
* @param pos
*/
public void pasteExcelSheet(String pos) {
moveStart();
if (this.find(pos)) {
Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
Dispatch.call(textRange, "Paste");
}
} /**
* 在当前文档指定的位置拷贝表格
*
* @param pos
* 当前文档指定的位置
* @param tableIndex
* 被拷贝的表格在word文档中所处的位置
*/
public void copyTable(String pos, int tableIndex) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
Dispatch range = Dispatch.get(table, "Range").toDispatch();
Dispatch.call(range, "Copy");
if (this.find(pos)) {
Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
Dispatch.call(textRange, "Paste");
}
} /**
* 在当前文档指定的位置拷贝来自另一个文档中的表格
*
* @param anotherDocPath
* 另一个文档的磁盘路径
* @param tableIndex
* 被拷贝的表格在另一格文档中的位置
* @param pos
* 当前文档指定的位置
*/
public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex,
String pos) {
Dispatch doc2 = null;
try {
doc2 = Dispatch.call(documents, "Open", anotherDocPath)
.toDispatch();
// 所有表格
Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item",
new Variant(tableIndex)).toDispatch();
Dispatch range = Dispatch.get(table, "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;
}
}
} /**
* 在当前文档指定的位置拷贝来自另一个文档中的图片
*
* @param anotherDocPath
* 另一个文档的磁盘路径
* @param shapeIndex
* 被拷贝的图片在另一格文档中的位置
* @param pos
* 当前文档指定的位置
*/
public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex,
String pos) {
Dispatch doc2 = null;
try {
doc2 = Dispatch.call(documents, "Open", anotherDocPath)
.toDispatch();
Dispatch shapes = Dispatch.get(doc2, "InLineShapes").toDispatch();
Dispatch shape = Dispatch.call(shapes, "Item",
new Variant(shapeIndex)).toDispatch();
Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch();
Dispatch.call(imageRange, "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;
}
}
} /**
* 创建表格
*
* @param pos
* 位置
* @param cols
* 列数
* @param rows
* 行数
*/
public void createTable(String pos, int numCols, int numRows) {
if (find(pos)) {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
Dispatch range = Dispatch.get(selection, "Range").toDispatch();
@SuppressWarnings("unused")
Dispatch newTable = Dispatch.call(tables, "Add", range,
new Variant(numRows), new Variant(numCols),new Variant(1)).toDispatch();
Dispatch.call(selection, "MoveRight");
} else {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
Dispatch range = Dispatch.get(selection, "Range").toDispatch();
@SuppressWarnings("unused")
Dispatch newTable = Dispatch.call(tables, "Add", range,
new Variant(numRows), new Variant(numCols),new Variant(1)).toDispatch();
Dispatch.call(selection, "MoveRight");
}
} /**
* 在指定行前面增加行
*
* @param tableIndex
* word文件中的第N张表(从1开始)
* @param rowIndex
* 指定行的序号(从1开始)
*/
public void addTableRow(int tableIndex, int rowIndex) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
Dispatch row = Dispatch.call(rows, "Item", new Variant(rowIndex))
.toDispatch();
Dispatch.call(rows, "Add", new Variant(row));
} /**
* 在第1行前增加一行
*
* @param tableIndex
* word文档中的第N张表(从1开始)
*/
public void addFirstTableRow(int tableIndex) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
Dispatch row = Dispatch.get(rows, "First").toDispatch();
Dispatch.call(rows, "Add", new Variant(row));
} /**
* 在最后1行前增加一行
*
* @param tableIndex
* word文档中的第N张表(从1开始)
*/
public void addLastTableRow(int tableIndex) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
Dispatch row = Dispatch.get(rows, "Last").toDispatch();
Dispatch.call(rows, "Add", new Variant(row));
} /**
* 增加一行
*
* @param tableIndex
* word文档中的第N张表(从1开始)
*/
public void addRow(int tableIndex) {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
Dispatch.call(rows, "Add");
} /**
* 增加一列
*
* @param tableIndex
* word文档中的第N张表(从1开始)
*/
public void addCol(int tableIndex) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
Dispatch.call(cols, "Add").toDispatch();
Dispatch.call(cols, "AutoFit");
} /**
* 在指定列前面增加表格的列
*
* @param tableIndex
* word文档中的第N张表(从1开始)
* @param colIndex
* 制定列的序号 (从1开始)
*/
public void addTableCol(int tableIndex, int colIndex) {
// 所有表格
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
System.out.println(Dispatch.get(cols, "Count"));
Dispatch col = Dispatch.call(cols, "Item", new Variant(colIndex))
.toDispatch();
// Dispatch col = Dispatch.get(cols, "First").toDispatch();
Dispatch.call(cols, "Add", col).toDispatch();
Dispatch.call(cols, "AutoFit");
} /**
* 在第1列前增加一列
*
* @param tableIndex
* word文档中的第N张表(从1开始)
*/
public void addFirstTableCol(int tableIndex) {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
Dispatch col = Dispatch.get(cols, "First").toDispatch();
Dispatch.call(cols, "Add", col).toDispatch();
Dispatch.call(cols, "AutoFit");
} /**
* 在最后一列前增加一列
*
* @param tableIndex
* word文档中的第N张表(从1开始)
*/
public void addLastTableCol(int tableIndex) {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
// 表格的所有行
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
Dispatch col = Dispatch.get(cols, "Last").toDispatch();
Dispatch.call(cols, "Add", col).toDispatch();
Dispatch.call(cols, "AutoFit");
} /**
* 自动调整表格
*
*/
public void autoFitTable() {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
int count = Dispatch.get(tables, "Count").toInt();
for (int i = 0; i < count; i++) {
Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))
.toDispatch();
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
Dispatch.call(cols, "AutoFit");
}
} /**
* 调用word里的宏以调整表格的宽度,其中宏保存在document下
*
*/
public void callWordMacro() {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
int count = Dispatch.get(tables, "Count").toInt();
Variant vMacroName = new Variant("Normal.NewMacros.tableFit");
@SuppressWarnings("unused")
Variant vParam = new Variant("param1");
@SuppressWarnings("unused")
Variant para[] = new Variant[] { vMacroName };
for (int i = 0; i < count; i++) {
Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))
.toDispatch();
Dispatch.call(table, "Select");
Dispatch.call(word, "Run", "tableFitContent");
}
} /**
* 设置当前选定内容的字体
*
* @param boldSize
* @param italicSize
* @param underLineSize
* 下划线
* @param colorSize
* 字体颜色
* @param size
* 字体大小
* @param name
* 字体名称
*/
public void setFont(boolean bold, boolean italic, boolean underLine,
String size, String name) {
Dispatch font = Dispatch.get(selection, "Font").toDispatch();
Dispatch.put(font, "Name", new Variant(name));
Dispatch.put(font, "Bold", new Variant(bold));
Dispatch.put(font, "Italic", new Variant(italic));
Dispatch.put(font, "Underline", new Variant(underLine));
Dispatch.put(font, "Size", size);
} /**
* 设置单元格被选中
*
* @param tableIndex
* @param cellRowIdx
* @param cellColIdx
*/
public void setTableCellSelected(int tableIndex, int cellRowIdx,
int cellColIdx) {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
.toDispatch();
Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
new Variant(cellColIdx)).toDispatch();
Dispatch.call(cell, "Select");
} /**
* 设置选定单元格的垂直对起方式, 请使用setTableCellSelected选中一个单元格
*
* @param align
* 0-顶端, 1-居中, 3-底端
*/
public void setCellVerticalAlign(int verticalAlign) {
Dispatch cells = Dispatch.get(selection, "Cells").toDispatch();
Dispatch.put(cells, "VerticalAlignment", new Variant(verticalAlign));
} /**
* 设置当前文档中所有表格水平居中方式及其它一些格式,用在将word文件转化为html中,针对申报表
*/
public void setApplyTableFormat() {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
int tabCount = Integer
.valueOf(Dispatch.get(tables, "Count").toString()); // System.out.println(tabCount);
System.out
.println("*******************************************************");
for (int i = 1; i <= tabCount; i++) {
Dispatch table = Dispatch.call(tables, "Item", new Variant(i))
.toDispatch();
Dispatch rows = Dispatch.get(table, "Rows").toDispatch(); if (i == 1) {
Dispatch.put(rows, "Alignment", new Variant(2)); // 1-居中,2-Right
continue;
}
Dispatch.put(rows, "Alignment", new Variant(1)); // 1-居中
Dispatch.call(table, "AutoFitBehavior", new Variant(1));// 设置自动调整表格方式,1-根据窗口自动调整
Dispatch.put(table, "PreferredWidthType", new Variant(1));
Dispatch.put(table, "PreferredWidth", new Variant(700));
System.out.println(Dispatch.get(rows, "HeightRule").toString());
Dispatch.put(rows, "HeightRule", new Variant(1)); // 0-自动wdRowHeightAuto,1-最小值wdRowHeightAtLeast,
// 2-固定wdRowHeightExactly
Dispatch.put(rows, "Height", new Variant(0.04 * 28.35));
// int oldAlign = Integer.valueOf(Dispatch.get(rows,
// "Alignment").toString());
// System.out.println("Algin:" + oldAlign);
}
} /**
* 设置段落格式
*
* @param alignment
* 0-左对齐, 1-右对齐, 2-右对齐, 3-两端对齐, 4-分散对齐
* @param lineSpaceingRule
* @param lineUnitBefore
* @param lineUnitAfter
* @param characterUnitFirstLineIndent
*/
public void setParagraphsProperties(int alignment, int lineSpaceingRule,
int lineUnitBefore, int lineUnitAfter,
int characterUnitFirstLineIndent) {
Dispatch paragraphs = Dispatch.get(selection, "Paragraphs")
.toDispatch();
Dispatch.put(paragraphs, "Alignment", new Variant(alignment)); // 对齐方式
Dispatch.put(paragraphs, "LineSpacingRule", new Variant(
lineSpaceingRule)); // 行距
Dispatch.put(paragraphs, "LineUnitBefore", new Variant(lineUnitBefore)); // 段前
Dispatch.put(paragraphs, "LineUnitAfter", new Variant(lineUnitAfter)); // 段后
Dispatch.put(paragraphs, "CharacterUnitFirstLineIndent", new Variant(
characterUnitFirstLineIndent)); // 首行缩进字符数
} /**
* 设置当前段落格式, 使用前,请先选中段落
*/
public void getParagraphsProperties() {
Dispatch paragraphs = Dispatch.get(selection, "Paragraphs")
.toDispatch();
String val = Dispatch.get(paragraphs, "LineSpacingRule").toString(); // 行距
val = Dispatch.get(paragraphs, "Alignment").toString(); // 对齐方式
val = Dispatch.get(paragraphs, "LineUnitBefore").toString(); // 段前行数
val = Dispatch.get(paragraphs, "LineUnitAfter").toString(); // 段后行数
val = Dispatch.get(paragraphs, "FirstLineIndent").toString(); // 首行缩进
val = Dispatch.get(paragraphs, "CharacterUnitFirstLineIndent")
.toString(); // 首行缩进字符数
} /**
* 文件保存或另存为
*
* @param savePath
* 保存或另存为路径
*/
public void save(String savePath) {
Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),
"FileSaveAs", savePath);
} /**
* 文件保存为html格式
*
* @param savePath
* @param htmlPath
*/
public void saveAsHtml(String htmlPath) {
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
htmlPath, new Variant(8) }, new int[1]);
} /**
* 关闭文档
*
* @param val
* 0不保存修改 -1 保存修改 -2 提示是否保存修改
*/
public void closeDocument(int val) {
Dispatch.call(doc, "Close", new Variant(val));
doc = null;
} /**
* 关闭当前word文档
*
*/
public void closeDocument() {
if (doc != null) {
Dispatch.call(doc, "Save");
Dispatch.call(doc, "Close", new Variant(saveOnExit));
doc = null;
}
} public void closeDocumentWithoutSave() {
if (doc != null) {
Dispatch.call(doc, "Close", new Variant(false));
doc = null;
}
} /**
* 关闭全部应用
*
*/
public void close() {
// closeDocument();
if (word != null) {
Dispatch.call(word, "Quit");
word = null;
}
selection = null;
documents = null;
} /**
* 打印当前word文档
*
*/
public void printFile() {
if (doc != null) {
Dispatch.call(doc, "PrintOut");
}
} /**
* 保护当前档,如果不存在, 使用expression.Protect(Type, NoReset, Password)
*
* @param pwd
* WdProtectionType 可以是下列 WdProtectionType 常量之一:
* 1-wdAllowOnlyComments, 2-wdAllowOnlyFormFields,
* 0-wdAllowOnlyRevisions, -1-wdNoProtection,
* 3-wdAllowOnlyReading
*
* 使用参照 main1()
*/
public void protectedWord(String pwd) {
String protectionType = Dispatch.get(doc, "ProtectionType").toString();
if (protectionType.equals("-1")) {
Dispatch.call(doc, "Protect", new Variant(3), new Variant(true),
pwd);
}
} /**
* 解除文档保护,如果存在
*
* @param pwd
* WdProtectionType 常量之一(Long 类型,只读):
* 1-wdAllowOnlyComments,2-wdAllowOnlyFormFields、
* 0-wdAllowOnlyRevisions,-1-wdNoProtection, 3-wdAllowOnlyReading
*
* 使用参照 main1()
*/
public void unProtectedWord(String pwd) {
String protectionType = Dispatch.get(doc, "ProtectionType").toString();
if (protectionType.equals("3")) {
Dispatch.call(doc, "Unprotect", pwd);
}
} /**
* 设置word文档安全级别
*
* @param value
* 1-msoAutomationSecurityByUI 使用“安全”对话框指定的安全设置。
* 2-msoAutomationSecurityForceDisable
* 在程序打开的所有文件中禁用所有宏,而不显示任何安全提醒。 3-msoAutomationSecurityLow
* 启用所有宏,这是启动应用程序时的默认值。
*/
public void setAutomationSecurity(int value) {
word.setProperty("AutomationSecurity", new Variant(value));
} /**
* 读取文档中第paragraphsIndex段文字的内容;
*
* @param paragraphsIndex
* @return
*/
public String getParagraphs(int paragraphsIndex) {
String ret = "";
Dispatch paragraphs = Dispatch.get(doc, "Paragraphs").toDispatch(); // 所有段落
int paragraphCount = Dispatch.get(paragraphs, "Count").getInt(); // 一共的段落数
Dispatch paragraph = null;
Dispatch range = null;
if (paragraphCount > paragraphsIndex && 0 < paragraphsIndex) {
paragraph = Dispatch.call(paragraphs, "Item",
new Variant(paragraphsIndex)).toDispatch();
range = Dispatch.get(paragraph, "Range").toDispatch();
ret = Dispatch.get(range, "Text").toString();
}
return ret;
} /**
* 设置页眉文字
*
* @param cont
* @return
*
* Sub AddHeaderText() '设置页眉或页脚中的文字 '由 Headers、Footers 和
* HeaderFooter 属性返回 HeaderFooter 对象。下列示例更改当前页眉中的文字。 With
* ActiveDocument.ActiveWindow.View .SeekView =
* wdSeekCurrentPageHeader Selection.HeaderFooter.Range.Text =
* "Header text" .SeekView = wdSeekMainDocument End With End Sub
*/
public void setHeaderContent(String cont) {
Dispatch activeWindow = Dispatch.get(doc, "ActiveWindow").toDispatch();
Dispatch view = Dispatch.get(activeWindow, "View").toDispatch();
// Dispatch seekView = Dispatch.get(view, "SeekView").toDispatch();
Dispatch.put(view, "SeekView", new Variant(9)); // wdSeekCurrentPageHeader-9 Dispatch headerFooter = Dispatch.get(selection, "HeaderFooter")
.toDispatch();
Dispatch range = Dispatch.get(headerFooter, "Range").toDispatch();
Dispatch.put(range, "Text", new Variant(cont));
// String content = Dispatch.get(range, "Text").toString();
Dispatch font = Dispatch.get(range, "Font").toDispatch(); Dispatch.put(font, "Name", new Variant("宋体 (中文正文)"));
Dispatch.put(font, "Bold", new Variant(false));
// Dispatch.put(font, "Italic", new Variant(true));
// Dispatch.put(font, "Underline", new Variant(true));
Dispatch.put(font, "Size", 9); Dispatch.put(view, "SeekView", new Variant(0)); // wdSeekMainDocument-0恢复视图;
}
}

jacob操作word的更多相关文章

  1. Java文件操作系列[3]——使用jacob操作word文档

    Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...

  2. jacob 操作word转pdf

    项目需要对上传的word及pdf进行在线预览,因基于jquery的pdf插件,很方面实现在线预览,而word实现在线预览费劲不少,于是想到在进行上传处理时,直接将word转成pdf,在预览时直接预览p ...

  3. jacob 操作word

    1. 首先下载jacob-1.18.zip,解压后有两个文件jacob.jar 和 jacob.dll.需要把jacob.jar放到你工程的classpath中并且把jacob.dll放到jdk的bi ...

  4. Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包

    可参考文档: http://wibiline.iteye.com/blog/1725492 下载jar包 http://download.csdn.net/download/javashixiaofe ...

  5. 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

    https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...

  6. 使用Jacob操作Wrod文档的工具类代码

    一.需要有jacob的jar包支持 import java.util.Iterator; import java.util.List; import java.util.HashMap; import ...

  7. java操作Word总结

    import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Varia ...

  8. Jacob操作ppt

    前几天使用Apache 的POI操作ppt,后来发现转成的图片出现乱码,而且处理了之后,还会有遗留 因此决定换一种处理方式 Jacob 是 JAVA-COM Bridge的缩写,是一个中间件,能够提供 ...

  9. JAVA操作word方法

    jacob,功能非常强大,能操作word,excel和pdf.下载地址是:http://sourceforge.net/projects/jacob-project/ 1.新建一个文档  Dispat ...

随机推荐

  1. 基于服务(Web Service)的文件管理Winform客户端实现(二)

    上一篇主要介绍文件管理服务有哪些方法,实现了哪些功能. 基于服务(Web Service)的文件管理Winform客户端实现(一) 本篇将根据文件服务服务实现Winform客户端设计.开发. 3.   ...

  2. SOAOffice和iWebOffice、NTKO的比较及其优势(转)

    http://www.cnblogs.com/liping13599168/articles/1681465.html SOAOffice和iWebOffice.NTKO的比较及其优势 近年来,市场上 ...

  3. 解决ie6下不支持fix属性,模拟固定定位

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  4. 待研究:insert客商账户触发器增加条件提示为空

    增加客商时候重名不给保存,增加修改条件提示找不到

  5. [转]mysql在windows下支持表名大小写,lower_case_table_names

    windows下mysql默认是不支表名大小写的,也就是表名大小写不敏感.用phpmyadmin创建的驼峰式表名,全部被强制成小写.mysql表名大小写敏感的参数: lower_case_table_ ...

  6. SQL 递归树 子父节点相互查询

    if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...

  7. LeetCode 169. Majority Element

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  8. Django 发布时间格式化

    Django在数据库中读取的时间是这种格式: {{title.pub_date} 显示:Nov. 17, 2016, 6:31 p.m. 显然,这不符合我们的习惯,所以需要格式化: {{title.p ...

  9. 通过js获取cookie的实例及简单分析

    今天碰到一个在firefox下swfupload 上传时session不一致问题 在一个项目遇到多文件上传时,firefox下,服务器端的session获取不一致问题. 解决办法: 解决办法:将ses ...

  10. <select> 标签使用

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...