如何用poi修改word中的内容
来源:互联网 发布:php开发是什么 编辑:程序博客网 时间:2024/04/28 03:29
近期在做一个用java修改word内容的功能,在网上搜索结合自己理解写了一段代码,放在博客中以供大家参考。但word2003修改时有时会有乱码,表格样式也会发生改变,暂时还未解决。
package wordTest;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.poi.POIXMLDocument;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.model.FieldsDocumentPart;import org.apache.poi.hwpf.usermodel.Field;import org.apache.poi.hwpf.usermodel.Fields;import org.apache.poi.hwpf.usermodel.Range;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;public class ReadAndWriteDoc { /** * 实现对word读取和修改操作(word2003.doc) */ public static void readwriteWord1(String filePath, Map<String,String> map){ //读取word模板// String fileDir = new File(base.getFile(),"http://www.cnblogs.com/http://www.cnblogs.com/../doc/").getCanonicalPath(); FileInputStream in = null; try { in = new FileInputStream(new File(filePath)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } HWPFDocument hdt = null; try { hdt = new HWPFDocument(in); } catch (IOException e1) { e1.printStackTrace(); } Fields fields = hdt.getFields(); Iterator<Field> it = fields.getFields(FieldsDocumentPart.MAIN).iterator(); while(it.hasNext()){ System.out.println(it.next().getType()); } //读取word文本内容 Range range = hdt.getRange(); System.out.println(range.text()); //替换文本内容 for (Map.Entry<String,String> entry: map.entrySet()) { range.replaceText(entry.getKey() ,entry.getValue()); } ByteArrayOutputStream ostream = new ByteArrayOutputStream(); String fileName = System.currentTimeMillis()+filePath.substring(filePath.lastIndexOf("/")+1, filePath.length()); FileOutputStream out = null; try { out = new FileOutputStream("D:\\My Test\\word\\out\\"+fileName,true); } catch (FileNotFoundException e) { e.printStackTrace(); } try { hdt.write(ostream); } catch (IOException e) { e.printStackTrace(); } //输出字节流 try { out.write(ostream.toByteArray()); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } try { ostream.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 实现对word读取和修改操作(word2007.docx) */ public static void readwriteWord2(String filePath, Map<String,String> map){ try { OPCPackage pack = POIXMLDocument.openPackage(filePath); XWPFDocument doc = new XWPFDocument(pack); List<XWPFParagraph> paragraphs = doc.getParagraphs(); System.out.println(paragraphs.size()); for (XWPFParagraph tmp : paragraphs) { System.out.println(tmp.getParagraphText()); List<XWPFRun> runs = tmp.getRuns(); for (XWPFRun aa : runs) { System.out.println("XWPFRun-Text:" + aa.getText(0)); for (Map.Entry<String,String> entry: map.entrySet()) { if (aa.getText(0) != null && aa.getText(0).contains(entry.getKey())) { aa.setText(entry.getValue(), 0); } } } } String fileName = System.currentTimeMillis()+filePath.substring(filePath.lastIndexOf("/")+1, filePath.length()); FileOutputStream fos = new FileOutputStream("D:\\My Test\\word\\out\\"+fileName,true); doc.write(fos); fos.flush(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String filePath = System.getProperty("user.dir")+"/resource/test.doc"; Map<String,String> map = new HashMap<String, String>(); map.put("URL说明", "hello, world!"); map.put("请求", "hello, world!"); readwriteWord1(filePath, map); }}
阅读全文
0 0
- 如何用poi修改word中的内容
- 如何通过POI修改word中的内容
- java POI 修改 读取 word 内容
- 如何用批处理来修改host文件内容
- 如何用c#读取word中的某一段文字
- 如何用C#将输出到文本文件中的内容换行?
- 如何用WORD编辑参考文献
- 如何用十六进制显示内容
- poi 修改EXCEL 内容
- 如何用GIMP修改图片尺寸
- (7) 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图
- POI word 修改字体颜色
- 如何用c#解析word(1)--获得文档中的style标签
- 如何用word制作商品条码
- 如何用Word制作流程图(一)
- 如何用Word编辑参考文献(转)
- 【转】如何用Word编辑参考文献
- 如何用word 2013 自动生成目录
- Spring中的AOP(二)——基于Annotation的配置方式(一)
- Spring中的AOP(一)——AOP基本概念和Spring对AOP的支持
- 在函数中传递一个对象
- nginx for Windows入门使用及作为图片服务器的用法
- execute immediate的简单用法(oracle)
- 如何用poi修改word中的内容
- App数据分析工具
- MySQL最大连接数设置
- Qt Dlib配置实现人脸检测
- 2751: [HAOI2012]容易题(easy)
- 基于Faster RCNN的医学图像检测(肺结节检测)
- SQL语言学习20170810
- 数组中操作引用数据类型,执行顺序的bug记录
- 微信H5支付细解