首先需要下载最新的jacob,不一定是帖子上说的1.14.1,接下来就是一下介绍了。缺点必须安装office
2008-4-27 Edited By DingDangXiaoMa
运用jacob 来与word 进行交互。
参考例子:http://www.99inf.net/SoftwareDev/Java/54344.htm
例
子做的不错,注释写的也很全。
配置说明:
http://www.danadler.com/jacob/
官方上下载
jacob的包。jacob-1.14.1
配置:
1。jacob-1.14.1-x86.dll 文件,加载进系统环境变量
path中。
2.jacob-1.14.1-x86.dll 文件拷到windows /system32中。
3.jacob-1.14.1-x86.dll
文件拷到jdk/bin中。
要不然会有找不到.dll文件的可能。程序就无法运行了。
下面的这个例子,表示了,把一些字符串写入到指定
的word中。程序可以运行于.java 文件。.jsp 还有servlet 环境下。
import
java.sql.Timestamp;
import
java.text.SimpleDateFormat;
import
java.util.ArrayList;
import
java.util.Date;
import
com.jacob.activeX.ActiveXComponent;
import
com.jacob.com.Dispatch;
import
com.jacob.com.Variant;
public
class
WordExtractor
...
{
//
创建一个组件。
private
ActiveXComponent MsWordApp
=
null
;
//
建立两个dispath.
private
Dispatch document
=
null
;
private
Dispatch selection
=
null
;
//
构造函数
public
WordExtractor()
...
{
super
();
}
/** */
/**
* 开启word档案
*
@param
makeVisible
* 显示或是不显示(true:显示;false:不显示)
*/
public
void
openWord(
boolean
makeVisible)
...
{
try
...
{
//
打开word(如果word未开启时)
if
(MsWordApp
==
null
)
...
{
MsWordApp
=
new
ActiveXComponent(
"
Word.Application
"
);
}
//
设置word是可见或不可见(true:显
示;false:不显示)
Dispatch.put(MsWordApp,
"
Visible
"
,
new
Variant(makeVisible));
}
catch
(RuntimeException e)
...
{
//
TODO Auto-generated catch block
e.printStackTrace();
}
}
/** */
/**
* 建立word的文本内容
*
*/
public
void
createNewDocument()
...
{
//
建立一个Dispatch对象
Dispatch documents
=
Dispatch.get(MsWordApp,
"
Documents
"
).toDispatch();
document
=
Dispatch.call(documents,
"
Add
"
).toDispatch();
}
/** */
/**
* 格式化时间字符串
*
@param
date_str
* 原始时间字符串
*
@return
修改后的字符串
*/
public
String ReplaceDateStr(String date_str)
...
{
String str
=
""
;
String[] date_str_arr
=
Tool.splitString(date_str,
"
-
"
);
//
String[] date_str_arr =null;
if
(date_str_arr.length
>
0
)
...
{
str
=
date_str_arr[
0
]
+
"
/
"
+
date_str_arr[
1
]
+
"
/
"
+
date_str_arr[
2
];
}
else
...
{
str
=
date_str;
}
return
str;
}
/** */
/**
* 写入资料到word中
*
@param
title
* 本文标题
*
@param
textToInsertarr
* 要写入的内容数组集合
*/
public
void
insertText(String title, ArrayList textToInsertarr)
...
{
selection
=
Dispatch.get(MsWordApp,
"
Selection
"
).toDispatch();
//
输入内容需要的对象
Dispatch alignment
=
Dispatch.get(selection,
"
ParagraphFormat
"
)
.toDispatch();
//
行列格式化需要的对象
Dispatch font
=
Dispatch.get(selection,
"
Font
"
).toDispatch();
//
字型格式化需要的对象
Dispatch font1
=
Dispatch.get(selection,
"
Font
"
).toDispatch();
//
字型格式化需要的对象
//
Dispatch image = Dispatch.get(selection,
//
"InLineShapes").toDispatch();
//
放入图片需要的对象
//
String mm =
//
"D:"+File.separator+"IRMAS_COMBINE"+File.separator+"images"+File.separator+"mis_login.jpg";
//
//
图片来源路径
//
格式化时间
java.util.Date ddate
=
new
Date();
SimpleDateFormat sdf2
=
new
SimpleDateFormat(
"
dd-MM月-yy
"
,
java.util.Locale.TRADITIONAL_CHINESE);
//
oracle要的时间格式
Timestamp ts1
=
new
Timestamp(ddate.getTime());
String date_str
=
(ts1.toString()).substring(
0
,
10
);
String result_str
=
ReplaceDateStr(date_str);
//
格式化后的时间 2008/04/27
//
文件标题
//
Dispatch.call(selection, "TypeParagraph");
//
空一行段落
Dispatch.put(alignment,
"
Alignment
"
,
"
1
"
);
//
(1:置中 2:靠右 3:靠左)
Dispatch.put(font1,
"
Bold
"
,
"
1
"
);
//
字型租体
Dispatch.put(font1,
"
Color
"
,
"
1,0,0,0
"
);
//
字型颜色(1,0,0,0=>红色
//
1,1,0,0=>棕色)
//
Dispatch.put(font, "Italic", "1");
//
字型斜体
Dispatch.call(selection,
"
TypeText
"
, title);
//
写入标题内容
//
标题格行
Dispatch.call(selection,
"
TypeParagraph
"
);
//
空一行段落
Dispatch.put(alignment,
"
Alignment
"
,
"
3
"
);
//
(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,
"
Text
"
,
"
"
);
Dispatch.call(selection,
"
MoveDown
"
);
//
游标往下一行
//
插入图片
/**/
/*
* Dispatch.call(selection, "TypeParagraph"); Dispatch.put(alignment,
* "Alignment", "2"); //(1:置中 2:靠右 3:靠
左) Dispatch.call(image,
* "AddPicture", mm); //写入图片
*/
/**/
/*
--------不输入到表格时------------
//主要内容(即参数数组中的值)
for(int i=0;i<textToInsertarr.size();i++)
{
String arr_tostr = textToInsertarr.get(i).toString();
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //
去掉前后'['和']'
String[] arr_split = arr_substr.split(","); //
字符串数组(在分隔每个元素值)
for(int j=0;j<arr_split.length;j++)
{
//主要内容
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", arr_split[j]); //
写入word的内容
Dispatch.put(font, "Bold", "0"); //
字型租体(1:租体 0:取消租体)
//Dispatch.put(font, "Italic", "1"); //
字型斜体(1:斜体 0:取消斜体)
//Dispatch.put(font, "Underline", "1"); //
文字加底线(1:加底线 0:不加底线)
Dispatch.call(selection, "MoveDown"); //
光标往下一行(才不会盖过上一输入的位置)
}
//每写入一次资料空一行,以区隔之用
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); //
游标往下一行
}
*/
//
依参数内的数组元素总个数计算要输入到表格的列数
int
all_count
=
0
;
for
(
int
p
=
0
; p
<
textToInsertarr.size(); p
++
)
...
{
String arr_tostr
=
textToInsertarr.get(p).toString();
//
先将数组元素转成字符串
String arr_substr
=
arr_tostr.substring(
1
, arr_tostr.length()
-
1
);
//
去掉前后'['和']'
String[] arr_split
=
arr_substr.split(
"
,
"
);
//
字符串数组(在分隔每个元素值)
int
num
=
arr_split.length;
all_count
+=
num;
//
累加个数
}
//
建立表格
Dispatch tables
=
Dispatch.get(document,
"
Tables
"
).toDispatch();
Dispatch range
=
Dispatch.get(selection,
"
Range
"
).toDispatch();
Dispatch newTable
=
Dispatch.call(tables,
"
Add
"
, range,
new
Variant(all_count),
new
Variant(
1
),
new
Variant(
1
))
.toDispatch();
//
设置列数,栏数,表格外框宽度
Dispatch.call(selection,
"
MoveRight
"
);
//
光标移到最右边
putTxtToCell(font, alignment,
1
,
1
,
1
, textToInsertarr);
//
表格内写入内容(从第1列第1栏开始)
//
mergeCell(1,1,1,all_count,1);
//
表格合并(从第1列第1栏开始,第X列第1栏结束)
//
autoFitTable();
//
自动调整表格
int
count
=
0
;
//
计算合并表格后的列数递增(例如:前五列合并成一列,则往下继续合并时,要考虑加上合并后的那一列)
//
依数组笔数合并表格
for
(
int
k
=
0
; k
<
textToInsertarr.size(); k
++
)
...
{
String arr_tostr
=
textToInsertarr.get(k).toString();
//
先将数组元素转成字符串
String arr_substr
=
arr_tostr.substring(
1
, arr_tostr.length()
-
1
);
//
去掉前后'['和']'
String[] arr_split
=
arr_substr.split(
"
,
"
);
//
字符串数组(在分隔每个元素值)
int
num
=
arr_split.length;
if
(k
==
0
)
...
{
//
第一次合并时,num值不需加前一列
mergeCell(
1
, k
+
1
,
1
, num,
1
);
count
++
;
}
else
...
{
//
第二次合并之后,num值要加前一列,以此
类推...
mergeCell(
1
, k
+
1
,
1
, num
+
count,
1
);
count
++
;
}
}
//
取消选择(因为最后insert进去的文字会显示反白,所以要取消)
Dispatch.call(selection,
"
MoveRight
"
,
new
Variant(
1
),
new
Variant(
1
));
//
插入页首页尾
//
取得活动窗体对象
Dispatch ActiveWindow
=
MsWordApp.getProperty(
"
ActiveWindow
"
)
.toDispatch();
http://images.csdn.net/syntax
分享到:
相关推荐
本篇文章将深入探讨如何利用JACOB来自动生成Word文档的目录。 首先,我们需要了解什么是目录(TOC,Table of Contents)。在Word文档中,目录是一份列出文档主要部分及其对应页码的索引,帮助读者快速定位到他们感...
标题中的“FLASHBUILDER程序使用JACOB生成WORD文档”涉及到的是使用Adobe Flash Builder这款集成开发环境(IDE)以及一个名为JACOB的Java库来创建Microsoft Word文档的过程。Flash Builder主要被用来开发Flex和...
java项目, 直接导入eclipse里面或者myeclipse里面就可以运行....通过jacob插件,通过word模板自动填充相应的数据,并且产生文件,为了解决有的tomcat下会乱码, 生成完成之后会转码一下, 解决了中文乱码问题.
jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names replace com.ms with com.jacob (for example com.ms.com.Variant maps to com.jacob.com.Variant. jacob...
以下是一段示例代码,展示了如何使用jacob生成Word表格: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; public class WordTableGenerator { public static void main...
要使用jacob生成Word文档,首先你需要一个Word模板文件,这个模板包含了所有固定的格式、样式以及占位符,这些占位符将在运行时被动态替换。例如,你可以创建一个包含文字、表格和图片的模板文件,然后通过编程方式...
Jacob提供了API来访问和修改Word的内置样式,这些样式用于生成目录。首先,你需要设置章节标题的样式,例如"标题1",然后在文档中使用这些样式标记你的章节标题。 ```java Dispatch.set(doc, "ActiveWindow", ...
Java使用Jacob库通过Word模板生成Word文档是一种常见的技术实践,特别是在需要自定义生成大量结构化报告的场景下。本项目实例提供了一个完整的解决方案,可以直接在MyEclipse环境中运行。下面将详细讲解这个项目的...
通过freemarker和jacob生成合同word文档html生成word文档(word模板类型的资源)压缩包里有有详细的生成方式,里面有两种生成方式,一种是用html生成。另一种则是后台生成 1、第一步通过office软件将word文档命名好...
这个资源提供了一个基于Jacob的示例工程,用于演示如何动态地根据模板生成Word文档。下面我们将深入探讨Jacob库的使用,以及如何在Java项目中实现这个功能。 首先,Jacob(Java COM Bridge)是一个开源的Java库,它...
Java使用Jacob库通过模板生成Word文档是一个常见的技术实践,尤其在企业级应用中,这种技术常用于批量生成报告、合同等文档。Jacob全称为Java Advanced COM Bridge,它为Java提供了与COM组件交互的能力,让我们可以...
总结来说,Jacob提供了一种强大的方式,使得Java开发者能够利用已有的Word功能,无需了解复杂的COM接口细节,即可实现Word文档的生成和导出。尽管存在一定的局限性,但只要应用场景合适,Jacob不失为一个实用的工具...
### Word 自动生成目录详解 在日常办公或学术写作中,Word 的自动目录功能为撰写者提供了极大的便利。通过本文,我们将详细介绍如何在 Word 中利用大纲级别来自动生成目录。 #### 一、利用大纲级别自动生成目录 *...
总的来说,Jacob提供了一种在Java中自动化处理Word文档的方法,适用于批量处理、数据导入导出、文档生成等场景。通过深入理解和运用Jacob库,开发者可以实现对Word文档的灵活控制和定制化处理。
利用jacob实现替换word文本和图片,需要导入响应jar包和dll.
错误可能出现在生成Word文档、使用Jacob操作Word,或者转换为PDF的任一阶段。可能的原因包括但不限于: 1. FreeMarker模板语法错误:模板中的表达式或控制结构可能有误。 2. 数据绑定问题:Java代码未能正确地将...
在提供的压缩包`Java-Jacob生成带有图片的word文档`中,应包含了一个完整的示例项目,包括所需的jar包和可能的图片文件。你可以参照这个示例来构建自己的项目,确保所有的库文件和依赖项都已正确配置。在实际开发中...
下面我们将详细讨论如何使用jacob库将Word文档转换为HTML。 首先,你需要在项目中引入jacob库。通常,这涉及到下载jacob.jar文件并将其添加到项目的类路径中。如果是MyEclipse这样的集成开发环境(IDE),你可以在...
在这个场景下,我们将详细探讨如何利用Jacob来分析和处理Word文档,特别是目录、段落以及它们之间的关系。 首先,标题和目录在Word文档中起着组织和导航的作用。Jacob提供了API,可以让我们访问到Word文档的内置...