首页 > 编程语言 > 详细

java 读写word java 动态写入 模板文件

时间:2015-12-05 02:15:42      阅读:251      评论:0      收藏:0      [点我收藏+]

上代码:

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.Map;

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.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;


/**
?* @author zhangchaochao
?* @date 2015-12-4上午10:30:59
?*/
public class MSWordPoi4?
{?
?????
??? /**
??? * @param args
??? */?
??? public static void main(String[] args)?
??? {?
??????? Map<String, String> map = new HashMap<String, String>();?
??????? map.put("${sub}", "湖南大学");?
??????? map.put("${item2.school}", "湖南大学");?
??????? map.put("${item2.address}", "湖南");?
//??????? map.put("${item1.name}", "王五1");?
//??????? map.put("${item1.numberStudent}", "编号002");?
//??????? map.put("${item1.sex}", "男2");?
//??????? map.put("${item1.age}", "19");?
??????? String srcPath = "D:\\铸造工艺卡.doc";?
??????? readwriteWord(srcPath, map);?
??? }?
?????
??? /**
??? * 实现对word读取和修改操作
??? *?
??? * @param filePath
??? *??????????? word模板路径和名称
??? * @param map
??? *??????????? 待填充的数据,从数据库读取
??? */?
??? public static void readwriteWord(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();?
??????? TableIterator tableIt = new TableIterator(range);??
??????? //迭代文档中的表格?
??????? int ii = 0;?
??????? while (tableIt.hasNext()) {???
??????????? Table tb = (Table) tableIt.next();???
??????????? ii++;?
??????????? System.out.println("第"+ii+"个表格数据...................");?
??????????? //迭代行,默认从0开始?
??????????? for (int i = 0; i < tb.numRows(); i++) {???
??????????????? TableRow tr = tb.getRow(i);???
??????????????? //只读前8行,标题部分?
??????????????? if(i >=8) break;?
??????????????? //迭代列,默认从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?
??????? //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();?
??????? fileName += ".doc";?
??????? FileOutputStream out = null;?
??????? try?
??????? {?
??????????? out = new FileOutputStream("D:/" + 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();?
??????? }?
??? }?
}?

需要的jar包看附件

java 读写word java 动态写入 模板文件

原文:http://hardworkbird.iteye.com/blog/2261635

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!