- 浏览: 228584 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
annyliyear:
找到的ExtJS实现多选下拉框3个代码 -
yinboxian:
源码太乱了
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
yinboxian:
我的peers第一次执行时可以得到正确的结果,以后就不行了。不 ...
JXTA中基于管道监听方式通信 -
cuizhenfu#gmail.com:
http://www.cnblogs.com/cuizhf
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
luxing44530:
请问, jsp页面如果在 META-INF 中, 改怎么访问? ...
Servlet3.0 新特性之模块化实践
基于开源项目jacob的基础上,封装了操作Word常用的方法和接口。jacob项目是通过java操作com接口的工具,这部分代码是封装了操作word的常用com接口。需要配合jacob.dll和jacob.jar使用。
import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComFailException;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
final class WordBean {
/**
* 读取Com接口异常的最多重试次数.
*/
private static final int MAX_RETRY = 10;
/**
* word文档.
*/
private Dispatch doc;
/**
* word运行程序对象.
*/
private ActiveXComponent wordApp = null;
/**
* 选定的范围或插入点.
*/
private Dispatch selection;
/**
* 退出时是否保存文档.
*/
private boolean saveOnExit = true;
/**
* 构造函数.
* @param show 是否可见.
*/
public WordBean(final boolean show) {
if (wordApp == null) {
wordApp = new ActiveXComponent("Word.Application");
wordApp.setProperty("Visible", new Variant(show));
}
}
/**
* 设置退出时参数.
* @param b boolean true-退出时保存文件,false-退出时不保存文件
*/
public void setSaveOnExit(
final boolean b) {
this.saveOnExit = b;
}
/**
* 把选定的内容或插入点向上移动.
* @param pos 移动的距离
*/
public void moveUp(
final int pos) {
if (selection == null) {
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
for (int i = 0; i < pos; i++) {
Dispatch.call(selection, "MoveUp");
}
}
/**
* 把选定的内容或者插入点向下移动.
* @param pos 移动的距离
*/
public void moveDown(
final int pos) {
if (selection == null) {
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
for (int i = 0; i < pos; i++) {
Dispatch.call(selection, "MoveDown");
}
}
/**
* 把选定的内容或者插入点向左移动.
* @param pos 移动的距离
*/
public void moveLeft(
final int pos) {
if (selection == null) {
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
for (int i = 0; i < pos; i++) {
Dispatch.call(selection, "MoveLeft");
}
}
/**
* 把选定的内容或者插入点向右移动.
* @param pos 移动的距离
*/
public void moveRight(
final int pos) {
if (selection == null) {
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
for (int i = 0; i < pos; i++) {
Dispatch.call(selection, "MoveRight");
}
}
/**
* 把插入点移动到文件首位置.
*/
public void moveStart() {
if (selection == null) {
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
Dispatch.call(selection, "HomeKey", new Variant(6));
}
/**
* 把插入点移动到文件尾位置.
*/
public void moveEnd() {
if (selection == null) {
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
Dispatch.call(selection, "EndKey", new Variant(6));
}
/**
* 增加缩进.
* @param pos 缩进量
*/
public void listIndent(
final int pos) {
Dispatch range = Dispatch.get(this.selection, "Range").toDispatch();
Dispatch listFormat = Dispatch.get(range, "ListFormat").toDispatch();
for (int i = 0; i < pos; i++) {
Dispatch.call(listFormat, "ListIndent");
}
}
/**
* 减少缩进.
* @param pos 缩进量
*/
public void listOutdent(
final int pos) {
Dispatch range = Dispatch.get(this.selection, "Range").toDispatch();
Dispatch listFormat = Dispatch.get(range, "ListFormat").toDispatch();
for (int i = 0; i < pos; i++) {
Dispatch.call(listFormat, "ListOutdent");
}
}
/**
* 回车换行.
*/
public void enter() {
int index = 1;
while (true) {
try {
Dispatch.call(this.selection, "TypeParagraph");
break;
} catch (ComFailException e) {
if (index++ >= MAX_RETRY) {
throw e;
} else {
continue;
}
}
}
}
/**
* 插入一个换页符.
*/
public void insertPageBreak() {
Dispatch.call(this.selection, "InsertBreak", new Variant(2));
}
/**
* 设置word文档是否可见.
* @param isVisible 是否可见
*/
public void setIsVisible(
final boolean isVisible) {
wordApp.setProperty("Visible", new Variant(isVisible));
}
/**
* 判断文档是否存在.
* @param docName 文档名称.
* @return boolean 是否存在.
*/
private boolean isExist(
final String docName) {
boolean result = false;
File file = new File(docName);
result = file.exists();
file = null;
return result;
}
/**
* 获取文件名称.
* @param docName 文档路径.
* @return 文件名称
*/
public String getFileName(
final String docName) {
int pos = docName.lastIndexOf("\\");
return docName.substring(pos + 1);
}
/**
* 打开文档.
* @param docName 文档路径.
* @throws WordException 异常
*/
public void openDocument(
final String docName)
throws WordException {
Dispatch docs = wordApp.getProperty("Documents").toDispatch();
if (isExist(docName)) {
this.closeDocument();
doc = Dispatch.call(docs, "Open", docName).toDispatch();
} else {
wordApp.invoke("Quit", new Variant[] {});
new WordException("[Open doc failed]: file["
+ docName + "] isn't existed!");
}
selection = Dispatch.get(wordApp, "Selection").toDispatch();
}
/**
* 添加一个新文档.
* @param docName 文档路径.
* @throws WordException 异常
*/
public void newDocument(
final String docName)
throws WordException {
try {
Dispatch docs = wordApp.getProperty("Documents").toDispatch();
doc = Dispatch.call(docs, "Add").toDispatch();
selection = Dispatch.get(wordApp, "Selection").toDispatch();
} catch (com.jacob.com.ComFailException cfe) {
throw new WordException(cfe.getMessage());
} catch (com.jacob.com.ComException ce) {
throw new WordException(ce.getMessage());
}
}
/**
* 插入一段文字.
* @param textToInsert 文字
* @param style 样式
*/
public void insertText(
final String textToInsert,
final String style) {
Dispatch.put(selection, "Text", textToInsert);
Dispatch.put(selection, "Style", getOutlineStyle(style));
Dispatch.call(selection, "MoveRight");
}
/**
* 插入一个图片.
* @param imagePath 图片路径.
* @param style 图片样式
*/
public void insertImage(
final String imagePath,
final String style) {
Dispatch.call(Dispatch.get(selection, "InLineShapes")
.toDispatch(), "AddPicture", imagePath);
Dispatch.call(selection, "MoveRight");
Dispatch.put(selection, "Style", getOutlineStyle(style));
this.enter();
}
/**
* 获取对应名称的Style对象.
* @param style Style名称.
* @return Style对象
*/
public Variant getOutlineStyle(
final String style) {
int index = 1;
while (true) {
try {
return Dispatch.call(
Dispatch.get(this.doc, "Styles").toDispatch(),
"Item", new Variant(style));
} catch (ComFailException e) {
if (index++ >= MAX_RETRY) {
throw e;
} else {
continue;
}
}
}
}
/**
* 插入标题.
* @param text 标题文字.
* @param style 设置标题的类型
*/
public void insertOutline(
final String text,
final String style) {
this.insertText(text, style);
this.enter();
}
/**
* 插入目录.
* tablesOfContents的参数的含义 Add(Range As Range, [UseHeadingStyles],
* [UpperHeadingLevel], [LowerHeadingLevel], [UseFields], [TableID],
* --这两个要不要都可以 [RightAlignPageNumbers],[IncludePageNumbers], [AddedStyles],
* --这个参数必须有值,必须是数字,如果是其它,则报com.jacob.com.ComFailException
* [UseHyperlinks],[HidePageNumbersInWeb], [UseOutlineLevels])
*/
public void insertTablesOfContents() {
Dispatch tablesOfContents = Dispatch.get(this.doc, "TablesOfContents")
.toDispatch();
Dispatch range = Dispatch.get(this.selection, "Range").toDispatch();
// Dispatch.call中的参数最多是9个,如果超过9个,请用Dispatch.callN或者Dispathc.invoke
/*
* Dispatch.invoke(tablesOfContents, "Add", Dispatch.Method,new
* Object[]{range,new Variant(true),new Variant(1), new Variant(3),new
* Variant(true), new Variant(true),new Variant(true) ,new
* Variant("1"),new Variant(true),new Variant(true)},new int[10]);
*/
Dispatch.callN(tablesOfContents, "Add", new Object[] {
range,
new Variant(true),
new Variant(1),
new Variant(3),
new Variant(false),
new Variant(true),
new Variant(true),
new Variant("1"),
new Variant(true),
new Variant(true)});
}
/**
* 从选定内容或插入点开始查找文本.
* @param toFindText 要查找的文本
* @return boolean true-查找到并选中该文本,false-未查找到文本
*/
public boolean find(
final String toFindText) {
if (toFindText == null
|| toFindText.equals("")) {
return false;
}
// 从selection所在位置开始查询
Dispatch find = Dispatch.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 boolean true-查找到并选中该文本,false-未查找到文本
*/
public boolean replaceText(
final String toFindText,
final String newText) {
if (!find(toFindText)) {
return false;
}
Dispatch.put(selection, "Text", newText);
return true;
}
/**
* 创建表格.
* @param numCols 列数
* @param numRows 行数
* @param autoFormat 默认格式
* @return 表格对象
*/
public Dispatch createTable(
final int numRows,
final int numCols,
final int autoFormat) {
int index = 1;
while (true) {
try {
Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
Dispatch range = Dispatch.get(selection, "Range").toDispatch();
Dispatch newTable = Dispatch.call(tables, "Add", range,
new Variant(numRows),
new Variant(numCols)).toDispatch();
Dispatch.call(selection, "MoveRight");
Dispatch.call(newTable, "AutoFormat", new Variant(autoFormat));
return newTable;
} catch (ComFailException e) {
if (index++ >= MAX_RETRY) {
throw e;
} else {
continue;
}
}
}
}
/**
* 在指定的表头里填写数据.
* @param table 表格
* @param cellColIdx 列号
* @param txt 文字
* @param style 样式
*/
public void putTableHeader(
final Dispatch table,
final int cellColIdx,
final String txt,
final String style) {
Dispatch cell = Dispatch.call(table, "Cell", new Variant(1),
new Variant(cellColIdx)).toDispatch();
Dispatch.call(cell, "Select");
Dispatch.put(selection, "Text", txt);
Dispatch.put(this.selection, "Style", getOutlineStyle(style));
}
/**
* 在指定的单元格里填写数据.
* @param table 表格
* @param cellRowIdx 行号
* @param cellColIdx 列号
* @param txt 文字
* @param style 样式
*/
public void putTableCell(
final Dispatch table,
final int cellRowIdx,
final int cellColIdx,
final String txt,
final String style) {
Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
new Variant(cellColIdx)).toDispatch();
Dispatch.call(cell, "Select");
Dispatch.put(selection, "Text", txt);
Dispatch.put(this.selection, "Style", getOutlineStyle(style));
}
/**
* 关闭当前word文档.
*/
private void closeDocument() {
if (doc != null) {
Dispatch.call(doc, "Save");
Dispatch.call(doc, "Close", new Variant(saveOnExit));
doc = null;
}
}
/**
* 文件保存或另存为.
* @param savePath 保存或另存为路径
*/
public void saveFileAs(
final String savePath) {
Dispatch.call(doc, "SaveAs", savePath);
}
/**
* 关闭文档.
*/
public void close() {
closeDocument();
if (wordApp != null) {
Dispatch.call(wordApp, "Quit");
wordApp = null;
}
selection = null;
}
}
评论
发表评论
-
内存池的实现原理
2024-04-07 16:20 01、内存池的概念 内存池是一种用于管理内存分配和释放的技术 ... -
Java NIO - Buffer
2024-04-06 18:06 0Java NIO中的Buffer用于和NIO通道进行交互。数 ... -
Java NIO - Socket通道
2024-04-06 01:11 01、新的Socket通道类可 ... -
Maven打成Zip包
2013-11-13 17:06 10611如果当前项目是使用Maven管理,并且需要打成Zip,按平 ... -
sigar开发注意点
2013-11-13 16:50 3094<dependency> < ... -
asfasdfasdfasdf
2012-10-11 21:48 0request.setCharacterEncoding(&q ... -
java.lang.NoClassDefFoundError: javax/persistence/EntityListener
2010-12-30 16:08 0正确答案是:添加hibernate3.5.*/lib/jpa/ ... -
共享spket和axis教程
2010-11-26 22:04 1153共享spket和axis教程 -
Try/catch/finally的另一种写法
2010-05-28 21:26 1648从学习Java以来,只是知道try/catch/finally ... -
如何在Eclipse安装反编译工具jad插件
2010-05-01 00:59 32511,将net.sf.jadclipse_3.3.0.jar拷贝 ... -
二分搜寻法(搜寻原则的代表)
2010-04-15 15:42 835如果搜寻的数列已经有排序,应该尽量利用它们已排序的特性,以减少 ... -
如何提高自己的Java编程水平
2010-04-09 00:21 116311. 扎实的基础。数 ... -
把多个任务分派给多个线程去执行
2010-03-28 17:38 1967要把多个任务分派给Java的多个线程去执行,这其中就会有一个任 ... -
剑客vs刀客 Java vs .NET之飘逸的Java
2010-03-28 11:42 679剑,一把好剑,重三两三分,轻如蝉翼,千年寒冰所铸,剑身咖啡色, ... -
Log4j基本使用方法
2010-03-28 10:57 771Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输 ... -
Java GUI 三态导航树
2010-03-27 19:48 18821 通过Java Swing实现的一个三态树组件,包括选择、去 ... -
Directory Chooser API
2010-03-26 23:42 867Java swing provides File choose ... -
[Java]双缓冲技术
2010-03-25 00:59 4351我们很多用Java中的g.drawImage()方法导入图像时 ... -
Java String转Date
2010-03-06 08:37 899Date date = new Date();String s ... -
利用Transaction ProxyFactoryBean 生成事务代理
2010-03-06 08:36 1257采用这种方式的配置时,其配置文件的增加非常快,每个bean 有 ...
相关推荐
java中生成word文件,生成固定文件模板的word文件 封装成工具类,可以更方便的实现需求
java常用工具类封装,线程池、elasticsearch高级客户端集成、word,pdf,excel等文档解析
封装好的工具类,传入list ,type(0 excel,1 word ,2 pdf) 导出相应的文件
java 微信公众号支付封装类,传入回调接口、用户openid、订单号、ip、fee即可无脑验签,返回数据直接前端调用。 用户授权获取用户信息,重定向方案设定。 推送通知 封装工具类,传入openid或者 List,可单推和群发。...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
基于Java的坦克大战设计与实现设计软件程序源码+word毕业论文文档. 此系统是使用Java语言实现坦克大战游戏程序,玩家通过连接访问进入游戏,通过操纵坦克来守卫基地,玩家还可以获得超级武器来提升坦克的属性,摧毁...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Word文档java架包+word工具类(工具类里面都已经封装好了一些方法,打开解压之后里面有个项目word_demo直接运行main文件夹下的Java类就可以得当一个带表格word文档(在你的E盘下),另外自己可以随意增减word文档上的...
基于JAVA CS远程监控系统软件的实现(源代码+WORD论文文档论文) 基于JAVA C/S远程监控系统软件的实现 摘 要 近年来,网络技术的不断发展,为远程监控技术的发展创造了条件。远程监控系统软件越来越受到人们的重视,...
超级玛丽游戏GUL 设计软件源码+WORD毕业论文文档。 超级玛丽小游戏的JAVA程序,进入游戏后首先按空格键开始,利用方向键来控制的马里奥的移动,同时检测马里奥与场景中的障碍物和敌人的碰撞,并判断马里奥的可移动...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率(重复率)、筛选出差异的文件、方便文件和文档的去重,并把所有的源码封装为jar包,简单...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...