Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包
可参考文档:
http://wibiline.iteye.com/blog/1725492
下载jar包
http://download.csdn.net/download/javashixiaofei/9696752
如上是jacob-1.17-M2.jar对应的jar包和dll文件....但是我在maven仓库中并没有发现jacob-1.17版本的.
所以如果使用maven项目的话推荐下载jacob-1.14版本的jar包和dll文件.
http://download.csdn.net/detail/ab873497717/5853741这个是dll文件,jar包文件可以去Maven仓库中去找.
使用方式:
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import com.jacob.activeX.ActiveXComponent; public class WriteDoc2 {
public static void main(String[] args) {
//在正式批量跑之前,做单个word文档的测试.
WordUtils util = new WordUtils(true);
util.openDocument("C:\\Users\\ABC\\Desktop\\test.docx");
util.setSaveOnExit(true);
util.insertText("xxx444dddd4x");
util.saveAs("C:\\Users\\ABC\\Desktop\\test.docx");
util.closeDocument();
}
}
对应WordUtils.java工具类,我是使用的如下:
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant; public class WordUtils { // word运行程序对象
private ActiveXComponent word;
// 所有word文档集合
private Dispatch documents;
// word文档
private Dispatch doc;
// 选定的范围或插入点
private Dispatch selection;
// 保存退出
private boolean saveOnExit; public WordUtils(boolean visible) {
word = new ActiveXComponent("Word.Application");
word.setProperty("Visible", new Variant(visible));
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();
} /**
* 打开一个已经存在的word文档
*
* @param docPath
*/
public void openDocument(String docPath) {
doc = Dispatch.call(documents, "Open", docPath).toDispatch();
selection = Dispatch.get(word, "Selection").toDispatch();
} /**
* 打开一个有密码保护的word文档
* @param docPath
* @param password
*/
public void openDocument(String docPath, String password) {
doc = Dispatch.call(documents, "Open", docPath).toDispatch();
unProtect(password);
selection = Dispatch.get(word, "Selection").toDispatch();
} /**
* 去掉密码保护
* @param password
*/
public void unProtect(String password){
try{
String protectionType = Dispatch.get(doc, "ProtectionType").toString();
if(!"-1".equals(protectionType)){
Dispatch.call(doc, "Unprotect", password);
}
}catch(Exception e){
e.printStackTrace();
}
} /**
* 添加密码保护
* @param password
*/
public void protect(String password){
String protectionType = Dispatch.get(doc, "ProtectionType").toString();
if("-1".equals(protectionType)){
Dispatch.call(doc, "Protect",new Object[]{new Variant(3), new Variant(true), password});
}
} /**
* 显示审阅的最终状态
*/
public void showFinalState(){
Dispatch.call(doc, "AcceptAllRevisionsShown");
} /**
* 打印预览:
*/
public void printpreview() {
Dispatch.call(doc, "PrintPreView");
} /**
* 打印
*/
public void print(){
Dispatch.call(doc, "PrintOut");
} public void print(String printerName) {
word.setProperty("ActivePrinter", new Variant(printerName));
print();
} /**
* 指定打印机名称和打印输出工作名称
* @param printerName
* @param outputName
*/
public void print(String printerName, String outputName){
word.setProperty("ActivePrinter", new Variant(printerName));
Dispatch.call(doc, "PrintOut", new Variant[]{new Variant(false), new Variant(false), new Variant(0), new Variant(outputName)});
} /**
* 把选定的内容或插入点向上移动
*
* @param pos
*/
public void moveUp(int pos) {
move("MoveUp", pos);
} /**
* 把选定的内容或者插入点向下移动
*
* @param pos
*/
public void moveDown(int pos) {
move("MoveDown", pos);
} /**
* 把选定的内容或者插入点向左移动
*
* @param pos
*/
public void moveLeft(int pos) {
move("MoveLeft", pos);
} /**
* 把选定的内容或者插入点向右移动
*
* @param pos
*/
public void moveRight(int pos) {
move("MoveRight", pos);
} /**
* 把选定的内容或者插入点向右移动
*/
public void moveRight() {
Dispatch.call(getSelection(), "MoveRight");
} /**
* 把选定的内容或者插入点向指定的方向移动
* @param actionName
* @param pos
*/
private void move(String actionName, int pos) {
for (int i = 0; i < pos; i++)
Dispatch.call(getSelection(), actionName);
} /**
* 把插入点移动到文件首位置
*/
public void moveStart(){
Dispatch.call(getSelection(), "HomeKey", new Variant(6));
} /**
* 把插入点移动到文件末尾位置
*/
public void moveEnd(){
Dispatch.call(getSelection(), "EndKey", new Variant(6));
} /**
* 插入换页符
*/
public void newPage(){
Dispatch.call(getSelection(), "InsertBreak");
} public void nextPage(){
moveEnd();
moveDown(1);
} public int getPageCount(){
Dispatch selection = Dispatch.get(word, "Selection").toDispatch();
return Dispatch.call(selection,"information", new Variant(4)).getInt();
} /**
* 获取当前的选定的内容或者插入点
* @return 当前的选定的内容或者插入点
*/
public Dispatch getSelection(){
if (selection == null)
selection = Dispatch.get(word, "Selection").toDispatch();
return selection;
} /**
* 从选定内容或插入点开始查找文本
* @param findText 要查找的文本
* @return boolean true-查找到并选中该文本,false-未查找到文本
*/
public boolean find(String findText){
if(findText == null || findText.equals("")){
return false;
}
// 从selection所在位置开始查询
Dispatch find = Dispatch.call(getSelection(), "Find").toDispatch();
// 设置要查找的内容
Dispatch.put(find, "Text", findText);
// 向前查找
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 findText
* @param newText
* @return boolean true-查找到并替换该文本,false-未查找到文本
*/
public boolean replaceText(String findText, String newText){
moveStart();
if (!find(findText))
return false;
Dispatch.put(getSelection(), "Text", newText);
return true;
} /**
* 进入页眉视图
*/
public void headerView(){
//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();
//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();
//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(view, "SeekView", "9");
} /**
* 进入页脚视图
*/
public void footerView(){
//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();
//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();
//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(view, "SeekView", "10");
} /**
* 进入普通视图
*/
public void pageView(){
//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();
//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();
//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(view, "SeekView", new Variant(0));//普通视图
} /**
* 全局替换文本
* @param findText
* @param newText
*/
public void replaceAllText(String findText, String newText){
int count = getPageCount();
for(int i = 0; i < count; i++){
headerView();
while (find(findText)){
Dispatch.put(getSelection(), "Text", newText);
moveEnd();
}
footerView();
while (find(findText)){
Dispatch.put(getSelection(), "Text", newText);
moveStart();
}
pageView();
moveStart();
while (find(findText)){
Dispatch.put(getSelection(), "Text", newText);
moveStart();
}
nextPage();
}
} /**
* 全局替换文本
* @param findText
* @param newText
*/
public void replaceAllText(String findText, String newText, String fontName, int size){
/****插入页眉页脚*****/
//取得活动窗体对象
Dispatch ActiveWindow = word.getProperty( "ActiveWindow").toDispatch();
//取得活动窗格对象
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane").toDispatch();
//取得视窗对象
Dispatch view = Dispatch.get(ActivePane, "View").toDispatch();
/****设置页眉*****/
Dispatch.put(view, "SeekView", "9");
while (find(findText)){
Dispatch.put(getSelection(), "Text", newText);
moveStart();
}
/****设置页脚*****/
Dispatch.put(view, "SeekView", "10");
while (find(findText)){
Dispatch.put(getSelection(), "Text", newText);
moveStart();
}
Dispatch.put(view, "SeekView", new Variant(0));//恢复视图
moveStart();
while (find(findText)){
Dispatch.put(getSelection(), "Text", newText);
putFontSize(getSelection(), fontName, size);
moveStart();
}
} /**
* 设置选中或当前插入点的字体
* @param selection
* @param fontName
* @param size
*/
public void putFontSize(Dispatch selection, String fontName, int size){
Dispatch font = Dispatch.get(selection, "Font").toDispatch();
Dispatch.put(font, "Name", new Variant(fontName));
Dispatch.put(font, "Size", new Variant(size));
} /**
* 在当前插入点插入字符串
*/
public void insertText(String text){
Dispatch.put(getSelection(), "Text", text);
} /**
* 将指定的文本替换成图片
* @param findText
* @param imagePath
* @return boolean true-查找到并替换该文本,false-未查找到文本
*/
public boolean replaceImage(String findText, String imagePath, int width, int height){
moveStart();
if (!find(findText))
return false;
Dispatch picture = Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture, "Select");
Dispatch.put(picture, "Width", new Variant(width));
Dispatch.put(picture, "Height", new Variant(height));
moveRight();
return true;
} /**
* 全局将指定的文本替换成图片
* @param findText
* @param imagePath
*/
public void replaceAllImage(String findText, String imagePath, int width, int height){
moveStart();
while (find(findText)){
Dispatch picture = Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture, "Select");
Dispatch.put(picture, "Width", new Variant(width));
Dispatch.put(picture, "Height", new Variant(height));
moveStart();
}
} /**
* 在当前插入点中插入图片
* @param imagePath
*/
public void insertImage(String imagePath, int width, int height){
Dispatch picture = Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture, "Select");
Dispatch.put(picture, "Width", new Variant(width));
Dispatch.put(picture, "Height", new Variant(height));
moveRight();
} /**
* 在当前插入点中插入图片
* @param imagePath
*/
public void insertImage(String imagePath){
Dispatch.call(Dispatch.get(getSelection(), "InLineShapes").toDispatch(), "AddPicture", imagePath);
} /**
* 获取书签的位置
* @param bookmarkName
* @return 书签的位置
*/
public Dispatch getBookmark(String bookmarkName){
try{
Dispatch bookmark = Dispatch.call(this.doc, "Bookmarks", bookmarkName).toDispatch();
return Dispatch.get(bookmark, "Range").toDispatch();
}catch(Exception e){
e.printStackTrace();
}
return null;
} /**
* 在指定的书签位置插入图片
* @param bookmarkName
* @param imagePath
*/
public void insertImageAtBookmark(String bookmarkName, String imagePath){
Dispatch dispatch = getBookmark(bookmarkName);
if(dispatch != null)
Dispatch.call(Dispatch.get(dispatch, "InLineShapes").toDispatch(), "AddPicture", imagePath);
} /**
* 在指定的书签位置插入图片
* @param bookmarkName
* @param imagePath
* @param width
* @param height
*/
public void insertImageAtBookmark(String bookmarkName, String imagePath, int width, int height){
Dispatch dispatch = getBookmark(bookmarkName);
if(dispatch != null){
Dispatch picture = Dispatch.call(Dispatch.get(dispatch, "InLineShapes").toDispatch(), "AddPicture", imagePath).toDispatch();
Dispatch.call(picture, "Select");
Dispatch.put(picture, "Width", new Variant(width));
Dispatch.put(picture, "Height", new Variant(height));
}
} /**
* 在指定的书签位置插入文本
* @param bookmarkName
* @param text
*/
public void insertAtBookmark(String bookmarkName, String text){
Dispatch dispatch = getBookmark(bookmarkName);
if(dispatch != null)
Dispatch.put(dispatch, "Text", text);
} /**
* 文档另存为
* @param savePath
*/
public void saveAs(String savePath){
Dispatch.call(doc, "SaveAs", savePath);
} /**
* 文档另存为PDF
* <b><p>注意:此操作要求word是2007版本或以上版本且装有加载项:Microsoft Save as PDF 或 XPS</p></b>
* @param savePath
*/
public void saveAsPdf(String savePath){
Dispatch.call(doc, "SaveAs", new Variant(17));
} /**
* 保存文档
* @param savePath
*/
public void save(String savePath){
Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),"FileSaveAs", savePath);
} /**
* 关闭word文档
*/
public void closeDocument(){
if (doc != null) {
Dispatch.call(doc, "Close", new Variant(saveOnExit));
doc = null;
}
} public void exit(){
word.invoke("Quit", new Variant[0]);
}
}
具体WordUtils类的使用暂时没有看到更多的例子,上面的util的使用是自己摸索出来的,可能不是最优,最恰当的.
//==================================================================================================
使用Java工具POI操作MicroSoft Office套件Word,Excle和PPT使用Maven工程的话需要在Pom.xml文件中引入的jar包.
一开始是想使用POI工具操作,但是从网上找来的代码始终报编译错误,代码中的一些类找不到,但是也明明已经引入了poi-3.x.jar包文件,更换了好几个poi版本的jar包仍是一样的效果.
随后调查,到底需要哪些jar包.....结果如下:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.8</version>
</dependency>
所依赖的全部jar包的截图
如果只引入一个poi-3.x.jar包是会报错的. POI具体操作Word,Excel,和PPT的代码,自行百度.只要jar包引入的正确,运行编译代码就没有问题.
Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包的更多相关文章
- 利用POI操作不同版本号word文档中的图片以及创建word文档
我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...
- POI加dom4j将数据库的数据按一定格式生成word文档
一:需求:将从数据库查处来的数据,生成word文档,并有固定的格式.(dom4j的jar包+poi的jar包) 二:解决:(1)先建立固定格式的word文档(2007版本以上),另存成为xml文件,作 ...
- word 文档导出 (freemaker+jacob)--java开发
工作中终于遇到了 需要导出word文旦的需求了.由于以前没有操作过,所以就先百度下了,基本上是:博客园,简书,CDSN,这几大机构的相关帖子比较多,然后花了2周时间 才初步弄懂. 学习顺序: 第一阶 ...
- Java将数据写入word文档(.doc)
Java可用org.apache.poi包来操作word文档.org.apache.poi包可于官网上下载,解压后各jar作用如下图所示: 可根据需求导入对应的jar. 一.HWPFDocument类 ...
- 整理关于Java进行word文档的数据动态数据填充
首先我们看下,别人整理的关于Java生成doc 的 资料. java生成word的几种方案 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用 ...
- [转载]Java动态填充word文档并上传到服务器
一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...
- [原创]Java动态填充word文档并上传到服务器
一. 需求背景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档,但是服务器上生成文档对服务器压力很大,目前服务器上生成文档第一种就是方式是jacob, 但是 ...
- 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...
- C# 中使用Word文档对图像进行操作
C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...
随机推荐
- MySQL处理表字段小技巧
MySQL利用正则函数替换值 update dateTest set date=REPLACE(date,'/','') where date REGEXP '\/'; SQL语句讲解: -- 将 所 ...
- tp5 excel导出类
1.引入Loader use think\Loader; 2.导出方法: /** * excel表格导出 * @param string $fileName 文件名称 * @param array $ ...
- 文档/视图(01):第一个Demo
学习文档视图编程的第一个demo,程序比较简单,主要对文档模板,文档,视图等相互关系的一个了解. 功能:菜单添加一个[操作]项,然后新建四份空白文档,点击[操作]之后,在四份空白文档上面各绘制一个Bu ...
- Ng第十课:应用机器学习的建议(Advice for Applying Machine Learning)
10.1 决定下一步做什么 10.2 评估一个假设 10.3 模型选择和交叉验证集 10.4 诊断偏差和方差 10.5 归一化和偏差/方差 10.6 学习曲线 10.7 决定下一步做什么 ...
- bzoj2002(lct模板)
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #inclu ...
- day21(Listener监听器)
监听器只要分为监听web对象创建与销毁,监听属性变化,感知监听器. 1.监听web对象的创建与销毁 servletContextListener 监听ServletContext对象的创建和销毁 ...
- 在linux中如何解压.tgz
然后首先:打开终端 1,进入下载路径下,比如我的就是进入Downloads下. 输入命令: cd Downloads 2,解压到当前文件夹 输入:tar zxvf 文件名.tgz -C ./ ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- 关于CentOS下 yum包下载下的rpm包放置路径
在CentOS下用yum安装,回发现在/var/cache/yum/下的base.extrs和updates下的packages下都没有发现下载的RPM 原来在/etc/yum.conf下没有设置下载 ...
- CentOS中自动加载802.1q模块
要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块. 下面是我所用的一个名为8021q.modules的脚本,用来在 ...