最近因为项目需要,特地研究了两天jacob--操作office的一个java插件,因时间缘故,只研究了操作word,特此共享:
本人喜欢通过代码学习东西,所以,直接讲操作的代码拷贝出来,供大家分享。
public static void main(String args[]) {
ComThread.InitSTA();// 初始化com的线程,非常重要!!使用结束后要调用 realease方法
/**
完成初始化工作
*/
ActiveXComponent objWord = new ActiveXComponent("Word.Application");// Instantiate objWord and Declare word object
Dispatch wordObject = (Dispatch) objWord.getObject();// Assign a local word object
Dispatch.put((Dispatch) wordObject, "Visible", new Variant(true));// Variant(true)表示word应用程序可见
Dispatch documents = objWord.getProperty("Documents").toDispatch(); // documents表示word的所有文档窗口,(word是多文档应用程序)
Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令创建一个新文档,用Open命令可以打开一个现有文档
/**
*开始写word的工作,包括标题,正文(段落一、段落二)
*/
Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容
Dispatch selection = Dispatch.get(wordObject, "Selection").toDispatch();
Dispatch paragraphFormat=Dispatch.get(selection,"ParagraphFormat").getDispatch();
Dispatch font = Dispatch.get(selection, "Font").toDispatch(); // 字型格式化需要的对象
Dispatch.put(paragraphFormat, "Alignment", "1"); // 设置标题的对齐方式(1:置中 2:靠右 3:靠左)
Dispatch.put(font, "Bold", "1"); // 字型租体
Dispatch.put(font, "Color", "1,0,0,0"); // 字型颜色(1,0,0,0=>红色 1,1,0,0=>棕色)
Dispatch.put(font, "Italic", "1"); //字型斜体
Dispatch.call(selection, "TypeText", "标题"); // 写入标题内容
Dispatch.call(selection, "TypeParagraph"); // 空一行段落
Dispatch.put(paragraphFormat, "Alignment", "3"); // 设置正文的对齐方式(1:置中 2:靠右 3:靠左)
Dispatch.put(selection, "Text", " 段落one");
Dispatch.call(selection,"MoveRight");
Dispatch.call(selection, "TypeParagraph"); // 空一行段落
Dispatch.put(selection, "Text", " 段落two");
Dispatch.call(selection,"MoveRight");
/**
* 写一个新的table
*/
Dispatch tables = Dispatch.get(wordContent, "Tables").toDispatch();
Dispatch tablerange = Dispatch.get(selection, "Range").toDispatch();
Dispatch newTable = Dispatch.call(tables, "Add", tablerange,
new Variant(2), new Variant(3)).toDispatch();
/**
* 往表格中填写内容。
*/
Dispatch newtables = Dispatch.get(wordContent, "Tables").toDispatch();
Dispatch table = Dispatch.call(newtables, "Item", new Variant(1)).toDispatch(); // 要填充的表格
Dispatch cols = Dispatch.get(table, "Columns").toDispatch(); // 表格的所有行
Dispatch rows = Dispatch.get(table, "Rows").toDispatch(); // 表格的所有列
int colsCount=Dispatch.get(cols, "Count").toInt();
int rowsCount=Dispatch.get(rows,"Count").toInt();
Dispatch col = Dispatch.get(cols, "First").toDispatch();
for(int i=1;i<=rowsCount;i++)
{
for(int m=1;m<=colsCount;m++)
{
Dispatch cell=Dispatch.call(table,"Cell",new Variant(i),new Variant(m)).getDispatch();
Dispatch.call(cell, "Select");
Dispatch.put(selection, "Text",i*m );
Dispatch.call(selection,"MoveRight");
}
}
Dispatch.call(selection, "EndKey",6);
/**
* 开始读word的工作
*/
Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs").toDispatch(); // 所有段落
int paragraphCount = Dispatch.get(paragraphs, "Count").toInt(); // 一共的段落数
for(int i =1;i<=paragraphCount;i++)
{
Dispatch paragraph = Dispatch.call(paragraphs, "Item", new Variant(i)).toDispatch();
Dispatch range = Dispatch.call(paragraph,"Range").toDispatch();
String ptext = Dispatch.get(range, "text").getString();
System.out.println(ptext);
}
/**
*加入图片
*/
String picturePath="E:\\照片\\苏歆然\\2009-01-08-00.bmp";//图片的路径
Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
"AddPicture", picturePath);
/**
* 关闭文档
*/
Dispatch.call(document, "SaveAs", new Variant("d://abc1.doc")); // 保存一个新文档
ComThread.Release();//释放com线程。根据jacob的帮助文档,com的线程回收不由java的垃圾回收器处理
}
生成的word 的格式如下:
补充:jacob操作powerpoint
ActiveXComponent ppt = new ActiveXComponent("PowerPoint.Application");
Dispatch pptObject=ppt.getObject();
Dispatch.put((Dispatch) pptObject, "Visible", new Variant(true));
// 设置程序界面是否可见
ActiveXComponent presentations = ppt.getPropertyAsComponent("Presentations");
// 生成一个新的ppt 对象
ActiveXComponent presentation =presentations.invokeGetComponent("Add", new Variant(1));
Dispatch windows = presentation.getProperty("Windows").toDispatch();
Dispatch window = Dispatch.call(windows, "Item", new Variant(1)).toDispatch();
Dispatch selection = Dispatch.get(window, "Selection").toDispatch();
ActiveXComponent slides = presentation.getPropertyAsComponent("Slides");
//添加第一张幻灯片;
slides.invoke("Add", new Variant(1), new Variant(1));
Dispatch slideRange=Dispatch.get(selection, "SlideRange").getDispatch();
Dispatch shapes=Dispatch.get(slideRange, "Shapes").getDispatch();
Dispatch shape1 = Dispatch.call(shapes, "Item", new Variant(2)).toDispatch();
Dispatch.call(shape1, "Select");
Dispatch shapeRange=Dispatch.get(selection, "ShapeRange").getDispatch();
Dispatch textFrame=Dispatch.get(shapeRange, "TextFrame").getDispatch();
Dispatch textRange=Dispatch.get(textFrame, "TextRange").getDispatch();
Dispatch.call(textRange, "Select");
Dispatch.put(textRange,"Text","测试");
//添加第二张幻灯片;
slides.invoke("Add", new Variant(2), new Variant(1));
// powerpoint幻灯展示设置对象
ActiveXComponent setting = presentation.getPropertyAsComponent("SlideShowSettings");
setting.invoke("Run");
//保存ppt
presentation.invoke("SaveAs", new Variant(PPT_FILE));
// 释放控制线程
ComThread.Release();
- 大小: 19.4 KB
分享到:
相关推荐
1.将jacob-1.18.zip下载解压,在文件夹中找到jacob-1.18-x64.dll,jacob-1.18-x86.dll,jacob.jar 2.通过 pom.xml 新增 <groupId>com.hynnet</groupId> <artifactId>jacob <version>1.18 3. 如果是32位系统...
《深入理解Java Jacob库:解析com.jacob.jacob_1.10.jar包》 在Java编程中,有时候我们需要与Windows API进行交互,比如自动化办公文档处理、打印任务或者访问硬件设备等。这时,Java Jacob库(Java和COM Bridge)...
首先,JACOB的核心在于其动态链接库(DLL)文件,包括`jacob-1.14.3-x64.dll`和`jacob-1.14.3-x86.dll`。这两个文件分别对应于64位和32位的操作系统。在安装JACOB时,需要根据你的Java环境和操作系统版本选择正确的...
本文将详细解析"jacob1.18"和"jacob1.19"这两个版本的特性、使用方法以及它们在Windows环境下的应用。 首先,我们来看"jacob1.18"版本。此版本是Jacob的一个较早发行版,它包含了一个名为"jacob.jar"的Java类库,这...
这个压缩包包含了Jacob的最新版本,即1.20版,包括两个动态链接库(DLL)文件:`jacob-1.20-x64.dll`和`jacob-1.20-x86.dll`,以及Java类库`jacob-1.20.jar`。这些文件分别用于64位和32位的Windows系统,确保了在...
这个压缩包"jacob1.19"包含了两个版本的Jacob动态链接库(DLL)文件:jacob-1.19-x64.dll适用于64位系统,而jacob-1.19-x86.dll则适用于32位系统。这两个文件是Jacob库的核心组成部分,它们实现了Java和COM之间的...
"jacob-1.18-x64.dll" 和 "jacob-1.18-x86.dll" 是Jacob库的动态链接库文件,分别对应于64位和32位的Windows操作系统。Jacob的核心功能就是通过这些DLL文件来实现Java和COM接口的通信。 "jacob.jar" 是Jacob的Java...
在本压缩包中,我们有两个关键文件:“jacob-1.14.3.jar”和“jacob-1.14.3-x64.dll”。 `jacob-1.14.3.jar` 是Java版的Jacob库,它是Java到COM桥接器(Java COM Bridge)的实现。Jacob库提供了一个纯Java接口,...
这个压缩包文件包含了Jacob的版本1.18,提供了两个不同的DLL文件,分别是jacob-1.18-x64.dll和jacob-1.18-x86.dll,分别对应64位和32位的Windows系统。 首先,我们来深入理解Jacob库的核心功能。Jacob全称为Java ...
**Jacob库介绍** Jacob(Java和COM Bridge)是一个开源Java库,它允许Java应用程序与Microsoft Windows平台上的COM组件进行交互。这个库的核心是通过JNI(Java Native Interface)实现的,使得Java代码能够调用COM...
Java采用Jacob调用SAPI实现合成语音是一种在Java应用程序中集成语音合成技术的常见方法。Jacob(Java COM Bridge)是一个开源库,它为Java开发者提供了一个桥梁,让他们能够使用Microsoft的COM(Component Object ...
**Jacob库详解** Jacob(Java-COM Bridge)是一个开源Java库,它允许Java应用程序与Microsoft Windows平台上的COM组件进行交互。这个库的核心是两个动态链接库(DLLs),即`jacob-1.19-x64.dll`和`jacob-1.19-x86....
这个压缩包包含了Jacob的三个不同版本:1.9、1.12和1.14,每个版本都有其特定的适用场景和改进。由于不同机器可能对不同版本的Jacob有兼容性需求,所以提供了这三个版本供用户选择。 Jacob的核心功能在于为Java提供...
标题“JACOB各版本下载”表明我们将讨论JACOB的不同版本及其获取途径,而描述则突出了使用JACOB在Java中调用OCX控件的简便性。 JACOB的全称是Java COM Bridge,它通过JNI(Java Native Interface)技术实现了Java和...
**Jacob API 深度解析** Jacob,全称为Java-COM Bridge,是一个开源的Java库,旨在提供一种方式让Java程序能够与COM组件(Component Object Model)进行交互。这个库在Windows平台上尤其有用,因为COM是Microsoft ...
《Jacob库详解:1.14.3-x86版本的使用与原理》 Jacob库,全称为Java COM Bridge,是Java与COM组件之间通信的一个重要桥梁。它为Java开发者提供了一个接口,使得在Java程序中能够调用Windows平台上的COM组件变得可能...
这个"jacob-1.18-M2"集合包含了Jacob项目的最新预发布版本,版本号为1.18-M2,它提供了完整的开发资源,包括Jacob.jar包、Jacob.dll文件以及相关的说明文档和API。 Jacob.jar是Jacob的核心库,它是Java类库,包含了...
这个资源包"jacob-1.16.x.zip"包含了Jacob的1.16系列不同版本,包括1.16、1.16.1、1.16-M1和1.16-M2,这些是项目的预发布版本和维护更新。 Jacob的核心功能在于提供了一种在Java程序中调用COM对象的方法,通过它的...
JACOB里的总共有两个包: com jacob activeX:JACOB可以通过它调度(Dispatch)activeX 控件 com jacob com:JACOB通过它调用系统DLL (activeX是由微软公司推出的用于Internet的技术 以前曾经被称为OLE 和OCX...
在本文中,我们将深入探讨如何配置jacob.jar和jacob.dll,并通过代码示例了解如何使用Jacob处理Word文档。 首先,配置jacob.jar和jacob.dll是使用Jacob的关键步骤。jacob.jar是Jacob的Java类库,包含了与COM交互的...