java 读写word java 动态写入 模板文件
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 = ;
while (tableIt.hasNext()) {
Table tb = (Table) tableIt.next();
ii++;
System.out.println("第"+ii+"个表格数据...................");
//迭代行,默认从0开始
for (int i = ; i < tb.numRows(); i++) {
TableRow tr = tb.getRow(i);
//只读前8行,标题部分
if(i >=) break;
//迭代列,默认从0开始
for (int j = ; j < tr.numCells(); j++) {
TableCell td = tr.getCell(j);//取得单元格
//取得单元格的内容
for(int k=;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();
}
}
}
java 读写word java 动态写入 模板文件下载地址
java 读写word java 动态写入 模板文件的更多相关文章
- [转载]java读写word文档,完美解决方案
做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出. 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介 ...
- [原创]java读写word文档,完美解决方案
做项目的过程中,经常需要把数据里里的数据读出来,经过加工,以word格式输出. 在网上找了很多解决方案都不太理想,偶尔发现了PageOffice,一个国产的Office插件,开发调用非常简单!比网上介 ...
- Java读取CSV数据并写入txt文件
读取CSV数据并写入txt文件 package com.vfsd; import java.io.BufferedWriter; import java.io.File; import java.io ...
- java获取网页源代码并写入本地文件中
import java.io.*; import java.net.*; public class URLDemo { public static void main(String args[]){ ...
- GeoJson的生成与解析,JSON解析,Java读写geojson,geotools读取shp文件,Geotools中Geometry对象与GeoJson的相互转换
GeoJson的生成与解析 一.wkt格式的geometry转成json格式 二.json格式转wkt格式 三.json格式的数据进行解析 四.Java读写geojson 五.geotools读取sh ...
- Java读写Word文件常用技术
Java操作操作Word文件,最近花了几天时间解决使用Word模板导出数据的问题,收集到一些资料分享下. 常见的技术如下: 1.POI(兼容doc.docx文件) 官方网站:http://poi. ...
- [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)
package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- java代码将e.printStackTrace()写入log4j文件异常信息
try { ... } catch (Exception e) { log.error( "failed!", e ); } 或者 try { ... } catch (Excep ...
- Freemaker基于word模板动态导出压缩文件汇总整理
Freemaker基于word模板动态导出压缩文件汇总整理 Freemaker基于word模板动态导出单个文件思路和代码详情见连接: https://www.cnblogs.com/lsy-blogs ...
随机推荐
- nginx平台初探(100%)
http://tengine.taobao.org/book/chapter_02.html 初探nginx架构(100%)¶ 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么 ...
- POJ 3276 Face The Right Way 反转
大致题意:有n头牛,有些牛朝正面,有些牛朝背面.现在你能一次性反转k头牛(区间[i,i+k-1]),求使所有的牛都朝前的最小的反转次数,以及此时最小的k值. 首先,区间反转的顺序对结果没有影响,并且, ...
- Spring之AntPathMatcher
前言 AntPathMatcher是什么?主要用来解决什么问题? 背景:在做uri匹配规则发现这个类,根据源码对该类进行分析,它主要用来做类URLs字符串匹配: 效果 可以做URLs匹配,规则如下 ? ...
- Java --HashMap源码解析
兴趣所致研究一下HashMap的源码,写下自己的理解,基于JDK1.8. 本文大概分析HashMap的put(),get(),resize()三个方法. 首先让我们来看看put()方法. public ...
- spring入门(二)【加载properties文件】
在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spri ...
- Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...
- 使用 SVG 制作单选和多选框动画【附源码】
通过 JavaScript 实现 SVG 路径动画,我们可以做很多花哨的东西.今天我们要为您介绍一些复选框和单选按钮效果.实现的主要思路是隐藏原生的输入框,使用伪元素创造更具吸引力的样式,输入框被选中 ...
- mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶
1)使用mongodb连接mongo var mongo = require('mongodb'), //引入mongodb dbHost = '127.0.0.1', dbPort = 27017; ...
- javascript 不响应可能是引用外部javascript时,引用顺序不对。
有相互引用关系的js,要最后执行的方法所在的js 先被引用. a.js 中有function1 b.js 中有function2 function1 () { function2(){} } 要 &l ...
- C# 操作PPt,去掉文本框的边框
using System; using System.Collections.Generic; using System.Linq; using System.Text; using OFFICECO ...