用户登录
用户注册

分享至

javaword 如何在java中操作word

  • 作者: 一-二-三-亖
  • 来源: 51数据库
  • 2020-04-19

想用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

web开发语言操作word的功能最好还是专业的控件,如果不想花钱可以使用SOAOFFICE绿色版

java导出word表格

首先我用的技术是 poi

这是代码,一个工具类得调用

public class WordUtil {

/**

* 基于模板文件导出 word 文档,此方法主要是用来处理文档中需要替换的文本内容,对图片和表格无效

*

* @param templatePath

* 模板文件的路径,要求路径中要包含全名,并且模板文件只能是 07 及以上格式,即 docx 的文件

* @param destFilePath

* 导出文件的存放路径,包含文件名,例如,E:/test/小区公告.docx

* @param data

* 用来替换文档中预定义的字符串,要求预定义的字符串与 data 中的 key 值要相同

*/

public static void exportWordByTemplate(String templatePath,

String destFilePath, Map<String, String> data) {

FileOutputStream out = null;

XWPFDocument doc = null;

try {

doc = new XWPFDocument(POIXMLDocument.openPackage(templatePath));

List<XWPFRun> listRun;

List<XWPFParagraph> listParagraphs = doc.getParagraphs();

for (int i = 0; i < listParagraphs.size(); i++) {

listRun = listParagraphs.get(i).getRuns();

for (int j = 0; j < listRun.size(); j++) {

if (data.get(listRun.get(j).getText(0)) != null) {

String val = data.get(listRun.get(j).getText(0));

listRun.get(j).setText(val, 0);

}

}

}

File destFile = new File(destFilePath);

if (!destFile.getParentFile().exists()) {

destFile.getParentFile().mkdirs();

}

out = new FileOutputStream(destFilePath);

doc.write(out);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (out != null)

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 基于模板文件导出 word 文档,该方法支持03格式,但是此方法只能保留文档内容,不能保留文档中的样式和图片,建议将模板使用 07 的格式保存

*

* @param templatePath

* 模板文件的路径

* @param destFilePath

* 导出文件的存放路径,包含文件名,例如,E:/test/小区公告.doc

* @param data

* 用来替换文档中预定义的字符串,要求预定义的字符串与 data 中的 key 值要相同

*/

public static void export03WordByTemplate(String templatePath,

String destFilePath, Map<String, String> data) {

try {

WordExtractor doc = new WordExtractor(new FileInputStream(

templatePath));

String content = doc.getText();

for (String key : data.keySet()) {

content = content.replaceAll(key, data.get(key));

}

byte b[] = content.getBytes();

ByteArrayInputStream bais = new ByteArrayInputStream(b);

POIFSFileSystem fs = new POIFSFileSystem();

DirectoryEntry directory = fs.getRoot();

directory.createDocument("WordDocument", bais);

FileOutputStream ostream = new FileOutputStream(destFilePath);

fs.writeFilesystem(ostream);

bais.close();

ostream.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws Exception {

Map<String, String> maps = new HashMap<String, String>();

maps.put("appellation", "万达公寓业主:");

maps.put(

"main_body",

"输出的内容");

maps.put("date", "2013年1月23日");

exportWordByTemplate("E:/sss 2.docx", "E:/test/test.doc", maps);

}

}

"E:/sss 2.docx 模板存放的地址。

E:/test/test.doc 新生成的地址。

阿帕奇的这个支持导PDF格式的吗

java 如何将html转换为word

两种方式:

1、纯Java,用POI来做

2、用JNA调用word接口,根据office api来做

第一种呢对于java开发来说相对简单,但是需要学POI,而且估计有些格式控制不好。第二种要学习JNA,而且需要边做变差word的office api。

转载请注明出处51数据库 » javaword 如何在java中操作word

软件
前端设计
程序设计
Java相关