jacob-1.15-M3.zip
jacob-1.15-M3-x86.dll copy 到c:\\windows\system32
引入jacob.jar
示例代码
import java.io.File;
importcom.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
class WordBean {
// 代表一个word 程序
private ActiveXComponent MsWordApp = null;
// 代表进行处理的word 文档
private Dispatch document = null;
public WordBean() {
// Open Word if we\'ve not done it already
if (MsWordApp == null) {
MsWordApp = new ActiveXComponent("Word.Application");
}
}
// 设置是否在前台打开 word程序 ,
public void setVisible(boolean visible) {
MsWordApp.setProperty("Visible", new Variant(visible));
// 这一句作用相同
// Dispatch.put(MsWordApp, "Visible", newVariant(visible));
}
// 创建一个新文档
public void createNewDocument() {
// Find the Documents collection object maintained by Word
// documents表示word的所有文档窗口,(word是多文档应用程序)
Dispatch documents = Dispatch.get(MsWordApp,"Documents").toDispatch();
// Call the Add method of the Documents collection to create
// a new document to edit
document = Dispatch.call(documents, "Add").toDispatch();
}
// 打开一个存在的word文档,并用document 引用 引用它
public void openFile(String wordFilePath) {
// Find the Documents collection object maintained by Word
// documents表示word的所有文档窗口,(word是多文档应用程序)
Dispatch documents = Dispatch.get(MsWordApp,"Documents").toDispatch();
document = Dispatch.call(documents, "Open", wordFilePath,
new Variant(true)/* 是否进行转换ConfirmConversions */,
new Variant(false)/* 是否只读 */).toDispatch();
// document = Dispatch.invoke(documents, "Open",Dispatch.Method,
// new Object[] { wordFilePath, new Variant(true),
// new Variant(false)
// }, new int[1]).toDispatch();
}
// 向 document 中插入文本内容
public void insertText(String textToInsert) {
// Get the current selection within Word at the moment.
// a new document has just been created then this will be at
// the top of the new doc 获得选 中的内容,如果是一个新创建的文件,因里面无内容,则光标应处于文件开头处
Dispatch selection = Dispatch.get(MsWordApp,"Selection").toDispatch();
// 取消选中,应该就是移动光标 ,否则 新添加的内容会覆盖选中的内容
Dispatch.call(selection, "MoveRight", new Variant(1), newVariant(1));
// Put the specified text at the insertion point
Dispatch.put(selection, "Text", textToInsert);
// 取消选中,应该就是移动光标
Dispatch.call(selection, "MoveRight", new Variant(1), newVariant(1));
}
// 向文档中添加 一个图片,
public void insertJpeg(String jpegFilePath) {
Dispatch selection = Dispatch.get(MsWordApp,"Selection").toDispatch();
Dispatch image = Dispatch.get(selection,"InLineShapes").toDispatch();
Dispatch.call(image, "AddPicture", jpegFilePath);
}
// 段落的处理,插入格式化的文本
public void insertFormatStr(String text) {
Dispatch wordContent = Dispatch.get(document,"Content").toDispatch(); // 取得word文件的内容
Dispatch.call(wordContent, "InsertAfter", text);// 插入一个段落到最后
Dispatch paragraphs = Dispatch.get(wordContent,"Paragraphs")
.toDispatch(); // 所有段落
int paragraphCount = Dispatch.get(paragraphs,"Count").changeType(
Variant.VariantInt).getInt();//一共的段落数
// 找到刚输入的段落,设置格式
Dispatch lastParagraph = Dispatch.call(paragraphs,"Item",
newVariant(paragraphCount)).toDispatch(); // 最后一段(也就是刚插入的)
// Range 对象表示文档中的一个连续范围,由一个起始字符位置和一个终止字符位置定义
Dispatch lastParagraphRange = Dispatch.get(lastParagraph,"Range")
.toDispatch();
Dispatch font = Dispatch.get(lastParagraphRange,"Font").toDispatch();
Dispatch.put(font, "Bold", new Variant(true)); // 设置为黑体
Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体
Dispatch.put(font, "Name", new Variant("宋体")); //
Dispatch.put(font, "Size", new Variant(12)); // 小四
Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
Dispatch.call(selection, "TypeParagraph");// 插入一个空行
Dispatch alignment = Dispatch.get(selection,"ParagraphFormat")
.toDispatch();// 段落格式
Dispatch.put(alignment, "Alignment", "2"); // (1:置中 2:靠右 3:靠左)
}
// word 中在对表格进行遍历的时候 ,是先列后行 先column 后cell
// 另外下标从1开始
public void insertTable(String tableTitle, int row, int column) {
Dispatch selection = Dispatch.get(MsWordApp,"Selection").toDispatch(); // 输入内容需要的对象
Dispatch.call(selection, "TypeText", tableTitle); // 写入标题内容 // 标题格行
Dispatch.call(selection, "TypeParagraph"); // 空一行段落
Dispatch.call(selection, "TypeParagraph"); // 空一行段落
Dispatch.call(selection, "MoveDown"); // 游标往下一行
// 建立表格
Dispatch tables = Dispatch.get(document,"Tables").toDispatch();
// int count = Dispatch.get(tables,
// "Count").changeType(Variant.VariantInt).getInt(); //document中的表格数量
// Dispatch table = Dispatch.call(tables, "Item", newVariant(
// 1)).toDispatch();//文档中第一个表格
Dispatch range = Dispatch.get(selection,"Range").toDispatch();// /当前光标位置或者选中的区域
Dispatch newTable = Dispatch.call(tables, "Add", range,
new Variant(row), newVariant(column), new Variant(1))
.toDispatch(); // 设置row,column,表格外框宽度
Dispatch cols = Dispatch.get(newTable,"Columns").toDispatch(); // 此表的所有列,
int colCount = Dispatch.get(cols, "Count").changeType(
Variant.VariantInt).getInt();//一共有多少列 实际上这个数==column
System.out.println(colCount + "列");
for (int i = 1; i <= colCount; i++) { // 循环取出每一列
Dispatch col = Dispatch.call(cols, "Item", newVariant(i))
.toDispatch();
Dispatch cells = Dispatch.