想用java操作word文件?jacob是个不错的选择,也就是java-com桥,你可以在http://sourceforge.net/projects/jacob-project/下载,我下载的版本是1.12,注意版本太低的话可能会报错。
如果没有特殊需求,可以直接使用jacob_*.zip中提供的jacob.jar和jacob.dll。把jacob.dll文件放在系统可以找得到的
路径上,一般放c:/windows/system32下就行了,注意你用的jacob.dll文件和你的jacob.jar包要匹配,否则会报错哦!
如果想自己编译也很简单,把jacob_*_src.zip解开,建个工程,在build.xml中稍作配置即可:
<property name="JDK" value="D:\Java\j2sdk1.4.2_13"/>
<property name="MSDEVDIR" value="D:\Microsoft Visual Studio\VC98"/>
<property name="version" value="1.12"/>
看出来了吗,你的机器上需要有JDK和VC环境,VC是用来生成jacob.dll文件的,如果编译时说找不到MSPDB60.DLL,那就在你的
Microsoft Visual Studio目录下搜索一下,拷贝到D:\Microsoft Visual
Studio\VC98\Bin下就行了。
如果需要对jacob里的jar包改名,(虽然通常不会发生这种情况,但如果你需要两个版本的jacob同时使用,改名可能是一种选择),这时你的工作就多一些:
(1)package改名是必须的了,比如我们把src下的com.jacob.activeX改为com.test.jacob.activeX,把
com.jacob.com改为com.test.jacob.com,打包时只有这两个包是有用的,所以只改它们就够了。
(2)然后修改build.xml中src.java.jacob.mainpackage的value为com.test.jacob,修改java.class.main的value为com.test.jacob.com.Jacob。
(3)别忘了javaJarBin中打包的源码路径也要改,<include name="com/**/*.class" />改为<include name="com/test/**/*.class" />。
(4)build.xml中对生成的dll和jar包也要改个名,比如我们把这两个文件改为jacob_test.dll和
jacob_test.jar。修改build.xml中的enerated.filename.dll和generated.filename.jar
的value为你新改的名字。
(5)com.test.jacob.com.LibraryLoader中,System.loadLibrary("jacob");改成
System.loadLibrary("jacob_test");
(6)另外,很重要的,在jni中*.cpp和*.h中com_jacob_com统一改为com_test_jacob_com,com/jacob
/com统一改为com/test/jacob/com。
(7)ant编译,编译好的文件在release目录下。
(8)最后把编译好的jacob_test.dll文件放在windows/system32下就大功告成了。
现在该用到jacob.jar了,如果你自己修改过jar包的名字,用新改的jar包,如jacob_test.jar,这里统一称为jacob.jar。
首先在classpath中引入jacob.jar包,如果是web应用,WEB-INF的lib中也要加入jacob.jar包。
下面给一个例子:
类ReplaceWord.java
import com.jacob.com.*;
import com.jacob.activeX.*;
public class ReplaceWord {
public static void main(String[] args) {
ActiveXComponent app = new ActiveXComponent("Word.Application"); //启动word
String inFile = "C:\\test.doc"; //要替换的word文件
try {
app.setProperty("Visible", new Variant(false)); //设置word不可见
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new
Object[] { inFile, new Variant(false),new Variant(false) }, new
int[1]).toDispatch();
//打开word文件,注意这里第三个参数要设为false,这个参数表示是否以只读方式打开,因为我们要保存原文件,所以以可写方式打开。
Dispatch
selection=app.getProperty("Selection").toDispatch();//获得对Selection组件
Dispatch.call(selection, "HomeKey", new Variant(6));//移到开头
Dispatch find = Dispatch.call(selection, "Find").toDispatch();//获得Find组件
Dispatch.put(find, "Text", "name"); //查找字符串"name"
Dispatch.call(find, "Execute"); //执行查询
Dispatch.put(selection, "Text", "张三"); //替换为"张三"
Dispatch.call(doc, "Save"); //保存
Dispatch.call(doc, "Close", new Variant(false));
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[] {});
app.safeRelease();
}
}
}
也许你会问,我怎么知道要调用哪个方法传哪些参数来进行操作?别忘了,word还有宏呢!自己录制一个宏,编辑这个宏就可以看到代码了!用哪个对象的哪个方法就看你的了。
我总结了一下:
document下的组件都用Dispatch selection=app.getProperty("Selection").toDispatch()这种方法获得;
再往下的组件就需要调用selection的方法来获取,如 Dispatch find = Dispatch.call(selection, "Find").toDispatch();
如果某个方法需要参数,Dispatch doc =
Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { inFile, new
Variant(false),new Variant(false) }, new
int[1]).toDispatch()是一个例子,这是调用docs的Open方法,Object[]数组里就是它需要的参数了;
如果要修改某个组件的属性呢,用Dispatch.put(find, "Text", "name")这种形式,"Text"是属性名,"name"是值。
java 操作word excel 哪个比较简单?
poi和jxl都可以,看你打算做什么了
poi效率高,功能强大,支持复杂操作,不可跨平台;
jxl操作简单,对中文支持非常好,可跨平台,但效率相对较低,对图片处理能力弱;
java操作word 的有哪几种方式
java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估
计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作
方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关
于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表
面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。
----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。
----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。
1、采用字节的形式读取rtf模板内容
2、将可变的内容字符串转为rtf编码
3、替换原文中的可变部分,形成新的rtf文档
主要程序如下:
public String bin2hex(String bin) {
char[] digital = "0123456789ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = bin.getBytes();
int bit;
for (int i = 0; i < bs.length;i++) {
bit = (bs[i] & 0x0f0)
>> 4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] & 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
public String readByteRtf(InputStream ins, String path){
String sourcecontent =
"";
try{
ins = new
FileInputStream(path);
byte[] b
= new byte[1024];
if (ins == null) {
System.out.println("源模板文件不存在");
}
int bytesRead = 0;
while (true) {
bytesRead = ins.read(b, 0, 1024); // return final read bytes
counts
if(bytesRead == -1) {// end of InputStream
System.out.println("读取模板文件结束");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string
using bytes
}
}catch(Exception e){
e.printStackTrace();
}
如何使用java操作word 文档
可以考虑ApachePOI,ApachePOI提供API给Java程式对MicrosoftOffice格式档案读和写的功能。
importjava.io.File;importjava.io.FileInputStream;
importjava.io.InputStream;
importorg.apache.poi.hwpf.extractor.WordExtractor;
/**读取word文本信息*/
publicclassWordDemo{
publicstaticvoidmain(String[]args){
try{
InputStreamis=newFileInputStream(newFile("src/123.doc"));
@SuppressWarnings("resource")
Stringtext123=newWordExtractor(is).getText();
System.out.println(text123);
}catch(Exceptione){
e.printStackTrace();
}
}
}
Java POI 如何操作word 格式
1、环境支持
1.1 添加poi支持:包下载地址http://www.apache.org/dyn/closer.cgi/poi/release/
1.2 POI对Excel文件的读取操作比较方便,POI还提供对Word的DOC格式文件的读取。但在它的发行版本中没有发布对Word支持的模块,需要另外下载一个POI的扩展的Jar包。下载地址为http://www.ibiblio.org/maven2/org/textmining/tm-extractors/0.4/ 下载extractors-0.4_zip这个文件
package com.ray.poi.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.textmining.text.extraction.WordExtractor;
/**
* 读写doc
* @author wangzonghao
*
*/
public class POIWordUtil {
/**
* 读入doc
* @param doc
* @return
* @throws Exception
*/
public static String readDoc(String doc) throws Exception {
// 创建输入流读取DOC文件
FileInputStream in = new FileInputStream(new File(doc));
WordExtractor extractor = null;
String text = null;
// 创建WordExtractor
extractor = new WordExtractor();
// 对DOC文件进行提取
text = extractor.extractText(in);
return text;
}
/**
* 写出doc
* @param path
* @param content
* @return
*/
public static boolean writeDoc(String path, String content) {
boolean w = false;
try {
// byte b[] = content.getBytes("ISO-8859-1");
byte b[] = content.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
DocumentEntry de = directory.createDocument("WordDocument", bais);
FileOutputStream ostream = new FileOutputStream(path);
fs.writeFilesystem(ostream);
bais.close();
ostream.close();
} catch (IOException e) {
e.printStackTrace();
}
return w;
}
}
测试
package com.ray.poi.util;
import junit.framework.TestCase;
public class POIUtilTest extends TestCase {
public void testReadDoc() {
try{
String text = POIWordUtil.readDoc("E:/work_space/poi/com/ray/poi/util/demo.doc");
System.out.println(text);
}catch(Exception e){
e.printStackTrace();
}
}
public void testWriteDoc() {
String wr;
try {
wr = POIWordUtil.readDoc("E:/work_space/poi/com/ray/poi/util/demo.doc");
boolean b = POIWordUtil.writeDoc("c:\\demo.doc",wr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java操作word的问题
EM30观看WORD和EXCEL直接看并不可行,
WORD需要借助手机上网打开,因为毕竟是LINUX系统,而EXCEL则需要有一个JAVA软件来实现,
而JAVA需要刷机实现授权才能看。
java io 操作word
把word的格式弄明白再说吧,要不找下第三方工具包帮忙解析读写
Java操作word里的表格问题,高分在线等!
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableCell;
import org.apache.poi.hwpf.usermodel.TableIterator;
import org.apache.poi.hwpf.usermodel.TableRow;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class ExportDocImpl
{
public void testWord(){
try{
FileInputStream in = new FileInputStream("D:\\sinye.doc");//载入文档
POIFSFileSystem pfs = new POIFSFileSystem(in);
HWPFDocument hwpf = new HWPFDocument(pfs);
Range range = hwpf.getRange();//得到文档的读取范围
TableIterator it = new TableIterator(range);
//迭代文档中的表格
while (it.hasNext()) {
Table tb = (Table) it.next();
//迭代行,默认从0开始
for (int i = 0; i < tb.numRows(); i++) {
TableRow tr = tb.getRow(i);
//迭代列,默认从0开始
for (int j = 0; j < tr.numCells(); j++) {
TableCell td = tr.getCell(j);//取得单元格
//取得单元格的内容
for(int k=0;k<td.numParagraphs();k++){
Paragraph para =td.getParagraph(k);
String s = para.text();
System.out.println(s);
} //end for
} //end for
} //end for
} //end while
}catch(Exception e){
e.printStackTrace();
}
}//end method
public void testWord1(){
try {
//word 2003: 图片不会被读取
InputStream is = new FileInputStream(new File("D:\\sinye.doc"));
WordExtractor ex = new WordExtractor(is);
String text2003 = ex.getText();
System.out.println(text2003);
//word 2007 图片不会被读取, 表格中的数据会被放在字符串的最后
OPCPackage opcPackage = POIXMLDocument.openPackage("D:\\sinye.doc");
POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
String text2007 = extractor.getText();
System.out.println(text2007);
} catch (Exception e) {
e.printStackTrace();
}
}
}
转载请注明出处51数据库 » java操作word 如何在java中操作word