java的word文件|java解析word文档有哪些方法

java的word文件|java解析word文档有哪些方法的第1张示图

Ⅰ 用java怎么将word文档转成图片格式

可以使用Spire.Doc for Java在Java中利用代码进行转换。需要在 Java 程序中添加Free Spire.Doc.jar文件作为依赖项。可以从这个链接下载 JAR 文件;如果使用Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。

repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories><dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>5.2.3</version></dependency></dependencies>

Java代码如下:

import com.spire.doc.Document;

import com.spire.doc.FileFormat;

import com.spire.doc.documents.ImageType;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

public class ConvertWordToOtherFormats {public static void main(String[] args) throws IOException {//创建Document对象Document doc = new Document();//加载Word文档doc.loadFromFile("C:\Users\Administrator\Desktop\sample.docx");//将指定页保存为BufferedImageBufferedImage image= doc.saveToImages(0, ImageType.Bitmap);//将图片数据保存为PNG格式文档File file= new File("output/ToPNG.png");ImageIO.write(image, "PNG", file);//将Word保存为SVG格式doc.saveToFile("output/ToSVG.svg",FileFormat.SVG);//将Word保存为RTF格式doc.saveToFile("output/ToRTF.rtf",FileFormat.Rtf);//将Word保存为XPS格式doc.saveToFile("output/ToXPS.xps",FileFormat.XPS);//将Word保存为XML格式doc.saveToFile("output/ToXML.xml",FileFormat.Xml);//将Word保存为TXT格式doc.saveToFile("output/ToTXT.txt",FileFormat.Txt);}

}

Ⅱ 如何在java中读取word文件

java读取word文档,获取文本内容,保留基本的换行格式。

java用POI对word进行解析。所需jar包,用maven引入

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.2-FINAL</version></dependency>

前端用webuploader上传控件,限制上传文件类型仅支持text和word.

txt为word的文本内容

Ⅲ java 怎么读取服务器上的word文件中的内容

通过流来读取,例如:

TextFileForm fileForm = (TextFileForm) form;FormFile formFile = fileForm.getTxtFile();if (formFile.getFileData().length == 0) {response.setCharacterEncoding("gb2312");response.getWriter().write("");}InputStream in = formFile.getInputStream();WordExtractor extractor = new WordExtractor();String str = extractor.extractText(in);这段代码就是负回责读取答word的

Ⅳ java读取word文件的问题

请贴出代码,谢谢。 请关闭输入流,释放资源,谢谢。调用close()方法。 其他貌似没有发现什么问题。 public static String run(String filename){ WordExtractor extractor=null; String text=null; try{ FileInputStream in = new FileInputStream (filename); extractor = new WordExtractor(); text=extractor.extractText(in); }catch(Exception ex){ //log return null; } return text; } public static void main(String[] args){ try{ FileOutputStream out=new FileOutputStream("result.txt"); out.write(WordProcess.run(args[0]).getBytes()); out.flush(); out.close(); }catch(Exception ex){ System.out.println(ex.toString()); } }看看这个。模范这样写,试试看。这个代码我试过,没问题,如果这样写还是有问题,那就不是代码的问题了。

Ⅳ java解析word文档有哪些方法

java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);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 = newFileInputStream(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 bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes} }catch(Exception e){ e.printStackTrace(); } return sourcecontent ;}以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提:c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf的文件。 package com;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;public class OperatorRTF {public String strToRtf(String content){char[] digital = "0123456789ABCDEF".toCharArray();StringBuffer sb = new StringBuffer("");byte[] bs = content.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 replaceRTF(String content,String replacecontent,intflag){String rc = strToRtf(replacecontent);String target = "";if(flag==0){target = content.replace("$timetop$",rc);}if(flag==1){target = content.replace("$info$",rc);}if(flag==2){target = content.replace("$idea$",rc);}if(flag==3){target = content.replace("$advice$",rc);}if(flag==4){target = content.replace("$infosend$",rc);}return target;}public String getSavePath() {String path = "C:\\YQ";File fDirecotry = new File(path);if (!fDirecotry.exists()) {fDirecotry.mkdirs();}return path;}public String ToSBC(String input){char[] c =input.toCharArray();for (int i =0; i < c.length; i++){if (c[i] == 32){c[i] = (char) 12288;continue;}if (c[i] < 127){c[i] = (char) (c[i] + 65248);}}return newString(c);}public void rgModel(String username, String content) {// TODO Auto-generated method stubDate current=new Date();SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-ddHH:mm:ss");String targetname = sdf.format(current).substring(11,13) + "时";targetname += sdf.format(current).substring(14,16) + "分";targetname += sdf.format(current).substring(17,19) + "秒";targetname += "_" + username +"_记录.rtf";String strpath = getSavePath();String sourname = strpath+"\\"+"模板.rtf";String sourcecontent = "";InputStream ins = null;try{ins = new FileInputStream(sourname);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 bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes}}catch(Exception e){e.printStackTrace();}String targetcontent = "";String array[] = content.split("~");for(int i=0;i<array.length;i++){if(i==0){targetcontent = replaceRTF(sourcecontent, array[i], i);}else{targetcontent = replaceRTF(targetcontent, array[i], i);}} try {FileWriter fw = new FileWriter(getSavePath()+"\\" +targetname,true);PrintWriter out = new PrintWriter(fw);if(targetcontent.equals("")||targetcontent==""){out.println(sourcecontent);}else{out.println(targetcontent);}out.close();fw.close();System.out.println(getSavePath()+" 该目录下生成文件" +targetname + " 成功");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubOperatorRTF oRTF = new OperatorRTF();String content ="2008年10月12日9时-2008年10月12日6时~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法";oRTF.rgModel("cheney",content);}}

Ⅵ 如何在java中操作word

想用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 的有哪几种方式

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 = newFileInputStream(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 bytescountsif(bytesRead == -1) {// end of InputStreamSystem.out.println("读取模板文件结束");break;}sourcecontent += new String(b, 0, bytesRead); // convert to stringusing bytes} }catch(Exception e){ e.printStackTrace(); }

Ⅷ java进行word文档的开发一般使用什么技术

需要借助一些Word操作库才行,如免费版Spire.Doc for Java,下面是该组件生成简单的Word文档

importcom.spire.doc.*;importcom.spire.doc.documents.Paragraph;publicclasshelloWorld{publicstaticvoidmain(String[]args){Stringoutput="output/helloWorld.docx";//createWorddocumentDocumentdocument=newDocument();//createanewsectionSectionsection=document.addSection();//createanewparagraphParagraphparagraph=section.addParagraph();//appendtextparagraph.appendText("HelloWorld!");//savethefiledocument.saveToFile(output,FileFormat.Docx);}}

Ⅸ java生成word文档的问题

Jacob解决Word文档的读写问题收藏Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为:http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368配置:(1)将解压包中的jacob.dll(x86常用,x64)拷到jdk安装目录下的jre\bin文件夹或windows安装路径下的WINDOWS\system32文件夹下(2)将jacob.jar文件拷到classpath下即可常见问题解决:对于”java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\jacob-1.14.3-x86.dll: 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正”这个问题,可以通过重新下载Jacob的jar及dll文件(最好版本比现在的低,如1.11)解决实例制作(主要功能:标题制作,表格制作,合并表格,替换文本,页眉页脚,书签处理):import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class WordOperate { public static void main(String args[]) { ActiveXComponent wordApp = new ActiveXComponent("Word.Application"); // 启动word // Set the visible property as required. Dispatch.put(wordApp, "Visible", new Variant(true));// //设置word可见 Dispatch docs = wordApp.getProperty("Documents").toDispatch(); // String inFile = "d:\\test.doc"; // Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, // new Object[] { inFile, new Variant(false), new Variant(false)},//参数3,false:可写,true:只读 // new int[1]).toDispatch();//打开文档 Dispatch document = Dispatch.call(docs, "Add").toDispatch();// create new document String userName = wordApp.getPropertyAsString("Username");// 显示用户信息 System.out.println("用户名:" + userName); // 文档对齐,字体设置//////////////////////// Dispatch selection = Dispatch.get(wordApp, "Selection").toDispatch(); Dispatch align = Dispatch.get(selection, "ParagraphFormat") .toDispatch(); // 行列格式化需要的对象 Dispatch font = Dispatch.get(selection, "Font").toDispatch(); // 字型格式化需要的对象 // 标题处理//////////////////////// Dispatch.put(align, "Alignment", "1"); // 1:置中 2:靠右 3:靠左 Dispatch.put(font, "Bold", "1"); // 字型租体 Dispatch.put(font, "Color", "1,0,0,0"); // 字型颜色红色 Dispatch.call(selection, "TypeText", "Word文档处理"); // 写入标题内容 Dispatch.call(selection, "TypeParagraph"); // 空一行段落 Dispatch.put(align, "Alignment", "3"); // 1:置中 2:靠右 3:靠左 Dispatch.put(selection, "Text", " "); Dispatch.call(selection, "MoveDown"); // 光标标往下一行 //表格处理//////////////////////// Dispatch tables = Dispatch.get(document, "Tables").toDispatch(); Dispatch range = Dispatch.get(selection, "Range").toDispatch(); Dispatch table1 = Dispatch.call(tables, "Add", range, new Variant(3), new Variant(2), new Variant(1)).toDispatch(); // 设置行数,列数,表格外框宽度 // 所有表格 Variant tableAmount = Dispatch.get(tables, "count"); System.out.println(tableAmount); // 要填充的表格 Dispatch t1 = Dispatch.call(tables, "Item", new Variant(1)) .toDispatch(); Dispatch t1_row = Dispatch.get(t1, "rows").toDispatch();// 所有行 int t1_rowNum = Dispatch.get(t1_row, "count").getInt(); Dispatch.call(Dispatch.get(t1, "columns").toDispatch(), "AutoFit");// 自动调整 int t1_colNum = Dispatch.get(Dispatch.get(t1, "columns").toDispatch(), "count").getInt(); System.out.println(t1_rowNum + " " + t1_colNum); for (int i = 1; i <= t1_rowNum; i++) { for (int j = 1; j <= t1_colNum; j++) { Dispatch cell = Dispatch.call(t1, "Cell", new Variant(i), new Variant(j)).toDispatch();// 行,列 Dispatch.call(cell, "Select"); Dispatch.put(selection, "Text", "cell" + i + j); // 写入word的内容 Dispatch.put(font, "Bold", "0"); // 字型租体(1:租体 0:取消租体) Dispatch.put(font, "Color", "1,1,1,0"); // 字型颜色 Dispatch.put(font, "Italic", "1"); // 斜体 1:斜体 0:取消斜体 Dispatch.put(font, "Underline", "1"); // 下划线 Dispatch Range = Dispatch.get(cell, "Range").toDispatch(); String cellContent = Dispatch.get(Range, "Text").toString(); System.out.println((cellContent.substring(0, cellContent .length() – 1)).trim()); } Dispatch.call(selection, "MoveDown"); // 光标往下一行(才不会输入盖过上一输入位置) } //合并单元格//////////////////////// Dispatch.put(selection, "Text", " "); Dispatch.call(selection, "MoveDown"); // 光标标往下一行 Dispatch range2 = Dispatch.get(selection, "Range").toDispatch(); Dispatch table2 = Dispatch.call(tables, "Add", range2, new Variant(8), new Variant(4), new Variant(1)).toDispatch(); // 设置行数,列数,表格外框宽度 Dispatch t2 = Dispatch.call(tables, "Item", new Variant(2)) .toDispatch(); Dispatch beginCell = Dispatch.call(t2, "Cell", new Variant(1), new Variant(1)).toDispatch(); Dispatch endCell = Dispatch.call(t2, "Cell", new Variant(4), new Variant(4)).toDispatch(); Dispatch.call(beginCell, "Merge", endCell); for (int row = 1; row <= Dispatch.get( Dispatch.get(t2, "rows").toDispatch(), "count").getInt(); row++) { for (int col = 1; col <= Dispatch.get( Dispatch.get(t2, "columns").toDispatch(), "count").getInt(); col++) { if (row == 1) { Dispatch cell = Dispatch.call(t2, "Cell", new Variant(1), new Variant(1)).toDispatch();// 行,列 Dispatch.call(cell, "Select"); Dispatch.put(font, "Color", "1,1,1,0"); // 字型颜色 Dispatch.put(selection, "Text", "merge Cell!"); } else { Dispatch cell = Dispatch.call(t2, "Cell", new Variant(row), new Variant(col)).toDispatch();// 行,列 Dispatch.call(cell, "Select"); Dispatch.put(font, "Color", "1,1,1,0"); // 字型颜色 Dispatch.put(selection, "Text", "cell" + row + col); } } Dispatch.call(selection, "MoveDown"); } //Dispatch.call(selection, "MoveRight", new Variant(1), new Variant(1));// 取消选择 // Object content = Dispatch.get(doc,"Content").toDispatch(); // Word文档内容查找及替换//////////////////////// Dispatch.call(selection, "TypeParagraph"); // 空一行段落 Dispatch.put(align, "Alignment", "3"); // 1:置中 2:靠右 3:靠左 Dispatch.put(font, "Color", 0); Dispatch.put(selection, "Text", "欢迎,Hello,world!"); Dispatch.call(selection, "HomeKey", new Variant(6));// 移到开头 Dispatch find = Dispatch.call(selection, "Find").toDispatch();// 获得Find组件 Dispatch.put(find, "Text", "hello"); // 查找字符串"hello" Dispatch.put(find, "Forward", "True");// 向前查找 // Dispatch.put(find, "Format", "True");// 设置格式 Dispatch.put(find, "MatchCase", "false");// 大小写匹配 Dispatch.put(find, "MatchWholeWord", "True"); // 全字匹配 Dispatch.call(find, "Execute"); // 执行查询 Dispatch.put(selection, "Text", "你好");// 替换为"你好" //使用方法传入的参数parameter调用word文档中的MyWordMacro宏// //Dispatch.call(document,macroName,parameter); //Dispatch.invoke(document,macroName,Dispatch.Method,parameter,new int[1]); //页眉,页脚处理//////////////////////// Dispatch ActiveWindow = wordApp.getProperty("ActiveWindow") .toDispatch(); Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane") .toDispatch(); Dispatch View = Dispatch.get(ActivePane, "View").toDispatch(); Dispatch.put(View, "SeekView", "9"); //9是设置页眉 Dispatch.put(align, "Alignment", "1"); // 置中 Dispatch.put(selection, "Text", "这里是页眉"); // 初始化时间 Dispatch.put(View, "SeekView", "10"); // 10是设置页脚 Dispatch.put(align, "Alignment", "2"); // 靠右 Dispatch.put(selection, "Text", "这里是页脚"); // 初始化从1开始 //书签处理(打开文档时处理)//////////////////////// //Dispatch activeDocument = wordApp.getProperty("ActiveDocument").toDispatch(); Dispatch bookMarks = Dispatch.call(document, "Bookmarks").toDispatch(); boolean isExist = Dispatch.call(bookMarks, "Exists", "bookMark1") .getBoolean(); if (isExist == true) { Dispatch rangeItem1 = Dispatch.call(bookMarks, "Item", "bookMark1") .toDispatch(); Dispatch range1 = Dispatch.call(rangeItem1, "Range").toDispatch(); Dispatch.put(range1, "Text", new Variant("当前是书签1的文本信息!")); String bookMark1Value = Dispatch.get(range1, "Text").toString(); System.out.println(bookMark1Value); } else { System.out.println("当前书签不存在,重新建立!"); Dispatch.call(bookMarks, "Add", "bookMark1", selection); Dispatch rangeItem1 = Dispatch.call(bookMarks, "Item", "bookMark1") .toDispatch(); Dispatch range1 = Dispatch.call(rangeItem1, "Range").toDispatch(); Dispatch.put(range1, "Text", new Variant("当前是书签1的文本信息!")); String bookMark1Value = Dispatch.get(range1, "Text").toString(); System.out.println(bookMark1Value); } //保存操作//////////////////////// Dispatch.call(document, "SaveAs", "D:/wordOperate.doc"); //Dispatch.invoke((Dispatch) doc, "SaveAs", Dispatch.Method, new Object[]{htmlPath, new Variant(8)}, new int[1]); //生成html文件 // 0 = wdDoNotSaveChanges // -1 = wdSaveChanges // -2 = wdPromptToSaveChanges //Dispatch.call(document, "Close", new Variant(0)); // // worddoc.olefunction("protect",2,true,""); // // Dispatch bookMarks = wordApp.call(docs,"Bookmarks").toDispatch(); // // System.out.println("bookmarks"+bookMarks.getProgramId()); // //Dispatch.call(doc, "Save"); //保存 // // Dispatch.call(doc, "Close", new Variant(true)); // //wordApp.invoke("Quit",new Variant[]{}); // wordApp.safeRelease();//Finalizers call this method }}

Ⅹ java如何根据word模板生成word文档

先下载jacob_1.10.1.zip。解压后将jacob.dll放到windows/system32下面或\j2sdk\bin下面。将jacob.jar加入项目。/** Java2word.java** Created on 2007年8月13日, 上午10:32** To change this template, choose Tools | Template Manager* and open the template in the editor.*//** 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段,Value代表用来替换的值。* word模板中所有要替换的字段(即HashMap中的Key)以特殊字符开头和结尾,如:$code$、$date$……,以免执行错误的替换。* 所有要替换为图片的字段,Key中需包含image或者Value为图片的全路径(目前只判断文件后缀名为:.bmp、.jpg、.gif)。* 要替换表格中的数据时,HashMap中的Key格式为“[email protected]”,其中:R代表从表格的第R行开始替换,N代表word模板中的第N张表格;Value为ArrayList对象,ArrayList中包含的对象统一为String[],一条String[]代表一行数据,ArrayList中第一条记录为特殊记录,记录的是表格中要替换的列号,如:要替换第一列、第三列、第五列的数据,则第一条记录为String[3] {“1”,”3”,”5”}。*/package com.word.util;/**** @author kdl*/import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class Java2word { private boolean saveOnExit; /** * word文档 */ Dispatch doc = null;/** * word运行程序对象s */ private ActiveXComponent word; /** * 所有word文档 */ private Dispatch documents;/** * 构造函数 */ public Java2word() { if(word==null){ word = new ActiveXComponent("Word.Application"); word.setProperty("Visible",new Variant(false)); } if(documents==null) documents = word.getProperty("Documents").toDispatch(); saveOnExit = false; } /** * 设置参数:退出时是否保存 * @param saveOnExit boolean true-退出时保存文件,false-退出时不保存文件 */ public void setSaveOnExit(boolean saveOnExit) { this.saveOnExit = saveOnExit; } /** * 得到参数:退出时是否保存 * @return boolean true-退出时保存文件,false-退出时不保存文件 */ public boolean getSaveOnExit() { return saveOnExit; }/** * 打开文件 * @param inputDoc String 要打开的文件,全路径 * @return Dispatch 打开的文件 */ public Dispatch open(String inputDoc) { return Dispatch.call(documents,"Open",inputDoc).toDispatch(); //return Dispatch.invoke(documents,"Open",Dispatch.Method,new Object[]{inputDoc},new int[1]).toDispatch(); } /** * 选定内容 * @return Dispatch 选定的范围或插入点 */ public Dispatch select() { return word.getProperty("Selection").toDispatch(); } /** * 把选定内容或插入点向上移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveUp(Dispatch selection,int count) { for(int i = 0;i < count;i ++) Dispatch.call(selection,"MoveUp"); } /** * 把选定内容或插入点向下移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveDown(Dispatch selection,int count) { for(int i = 0;i < count;i ++) Dispatch.call(selection,"MoveDown"); } /** * 把选定内容或插入点向左移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveLeft(Dispatch selection,int count) { for(int i = 0;i < count;i ++) { Dispatch.call(selection,"MoveLeft"); } } /** * 把选定内容或插入点向右移动 * @param selection Dispatch 要移动的内容 * @param count int 移动的距离 */ public void moveRight(Dispatch selection,int count) { for(int i = 0;i < count;i ++) Dispatch.call(selection,"MoveRight"); } /** * 把插入点移动到文件首位置 * @param selection Dispatch 插入点 */ public void moveStart(Dispatch selection) { Dispatch.call(selection,"HomeKey",new Variant(6)); }/** * 从选定内容或插入点开始查找文本 * @param selection Dispatch 选定内容 * @param toFindText String 要查找的文本 * @return boolean true-查找到并选中该文本,false-未查找到文本 */ public boolean find(Dispatch selection,String toFindText) { //从selection所在位置开始查询 Dispatch find = word.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 selection Dispatch 选定内容 * @param newText String 替换为文本 */ public void replace(Dispatch selection,String newText) { //设置替换文本 Dispatch.put(selection,"Text",newText); } /** * 全局替换 * @param selection Dispatch 选定内容或起始插入点 * @param oldText String 要替换的文本 * @param newText String 替换为文本 */ public void replaceAll(Dispatch selection,String oldText,Object replaceObj) { //移动到文件开头 moveStart(selection); if(oldText.startsWith("table") || replaceObj instanceof ArrayList) replaceTable(selection,oldText,(ArrayList) replaceObj); else { String newText = (String) replaceObj; if(newText==null) newText=""; if(oldText.indexOf("image") != -1&!newText.trim().equals("") || newText.lastIndexOf(".bmp") != -1 || newText.lastIndexOf(".jpg") != -1 || newText.lastIndexOf(".gif") != -1){ while(find(selection,oldText)) { replaceImage(selection,newText); Dispatch.call(selection,"MoveRight"); } }else{ while(find(selection,oldText)) { replace(selection,newText); Dispatch.call(selection,"MoveRight"); } } } } /** * 替换图片 * @param selection Dispatch 图片的插入点 * @param imagePath String 图片文件(全路径) */ public void replaceImage(Dispatch selection,String imagePath) { Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),"AddPicture",imagePath); } /** * 替换表格 * @param selection Dispatch 插入点 * @param tableName String 表格名称,形如[email protected]、[email protected][email protected],R代表从表格中的第N行开始填充,N代表word文件中的第N张表 * @param fields HashMap 表格中要替换的字段与数据的对应表 */ public void replaceTable(Dispatch selection,String tableName,ArrayList dataList) { if(dataList.size() <= 1) { System.out.println("Empty table!"); return; } //要填充的列 String[] cols = (String[]) dataList.get(0); //表格序号 String tbIndex = tableName.substring(tableName.lastIndexOf("@") + 1); //从第几行开始填充 int fromRow = Integer.parseInt(tableName.substring(tableName.lastIndexOf("$") + 1,tableName.lastIndexOf("@"))); //所有表格 Dispatch tables = Dispatch.get(doc,"Tables").toDispatch(); //要填充的表格 Dispatch table = Dispatch.call(tables,"Item",new Variant(tbIndex)).toDispatch(); //表格的所有行 Dispatch rows = Dispatch.get(table,"Rows").toDispatch(); //填充表格 for(int i = 1;i < dataList.size();i ++) { //某一行数据 String[] datas = (String[]) dataList.get(i);//在表格中添加一行 if(Dispatch.get(rows,"Count").getInt() < fromRow + i – 1) Dispatch.call(rows,"Add"); //填充该行的相关列 for(int j = 0;j < datas.length;j ++) { //得到单元格 Dispatch cell = Dispatch.call(table,"Cell",Integer.toString(fromRow + i – 1),cols[j]).toDispatch(); //选中单元格 Dispatch.call(cell,"Select"); //设置格式 Dispatch font = Dispatch.get(selection,"Font").toDispatch(); Dispatch.put(font,"Bold","0"); Dispatch.put(font,"Italic","0"); //输入数据 Dispatch.put(selection,"Text",datas[j]); } } } /** * 保存文件 * @param outputPath String 输出文件(包含路径) */ public void save(String outputPath) { Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs",outputPath); } /** * 关闭文件 * @param document Dispatch 要关闭的文件 */ public void close(Dispatch doc) { Dispatch.call(doc,"Close",new Variant(saveOnExit)); word.invoke("Quit",new Variant[]{}); word = null; } /** * 根据模板、数据生成word文件 * @param inputPath String 模板文件(包含路径) * @param outPath String 输出文件(包含路径) * @param data HashMap 数据包(包含要填充的字段、对应的数据) */ public void toWord(String inputPath,String outPath,HashMap data) { String oldText; Object newValue; try { if(doc==null) doc = open(inputPath); Dispatch selection = select(); Iterator keys = data.keySet().iterator(); while(keys.hasNext()) { oldText = (String) keys.next(); newValue = data.get(oldText);replaceAll(selection,oldText,newValue); } save(outPath); } catch(Exception e) { System.out.println("操作word文件失败!"); e.printStackTrace(); } finally { if(doc != null) close(doc); } }

未经允许不得转载:山九号 » java的word文件|java解析word文档有哪些方法

赞 (0)