读书人

依据Excel的内容和Word模板的内容生产

发布时间: 2012-09-09 09:27:54 作者: rapoo

根据Excel的内容和Word模板的内容生产Word文档

花了一个下午的时间。磨出来的一个东西..感觉好不错。。拿来分享下。。哈哈。。

?

大体功能是:根据Excel的内容和Word模板的内容生产Word文档

?

?业务1:excle 有 1000 个人..需要打印出 1000 个人的通知书。(单个的打印、分开管理)
?业务2:excle 有 1000 个人..需要连续打印出 1000 个人的通知书。

?

大体思路:

?

?? *??? 1、定义一个标签格式..本例中是:$(xxx)
?? *??? 2、在 word 中编辑好模板样式..另存为html模板。(也可以存为其他格式。但是注意编码问题。不然会乱码)
?? *??? 3、读取 excel 中的内容并封住为一个容器: list<map<String,String>>
?? *??? 4、读取html模板,并根据标签替换内容。再重新写个文件。
?? *???

?

开始都一路顺风...后面再连续的分页word文档的时候。遇到麻烦了.开始以为只要在每次循环的地方加上word的分页符就好了。。是的。思路是没错。。问题就出在了怎么加。。。。下面我在唠叨下我的经过:

?

?????我一次就是直接读取模板..替换..在循环的地方加上分页代码..结果失败了...效果是word..只看到了excel 第一条记录。开始我还以为是我的代码写错了。。后面在跟踪断点、查看源码才发现..其实循环的没错.....错在每次读模板的时候都有html的头部.等等代码....于是我仔细的查看了单个文件的源码。

?

???? 当我们把 word 模板另存为 html 的时候。。源码大致分为如下格式:

???? 头部:

??

? 测试类(把excel转为word):

?

?

package cn.xsbiz.main;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List; import java.util.Map;import sun.java2d.pipe.SpanShapeRenderer.Simple;/** *  * 功能:读取 excel 的内容根据wrod模板动态生产 wrod 文档 *  * 标签:$(xxx) *  * author 妞见妞爱 * */public class RxlsWdocMain {public static void main(String[] args) {OperatorWord word = new OperatorWord();OperatorExcel excel = new OperatorExcel(); File filepath = new File("f://xsjsj//tmp001.xls"); List<Map<String, String>>  list = excel.readExcelReList(filepath);System.out.println("共:"+list.size());/* * **************************************************************** * 下面的循环生产单个 word 的代码.. *  * 业务:excle 有 1000 个人..需要打印出 1000 个人的通知书。(单个的打印、分开管理) *  * 功能:如果excle 中有 1000条 记录,那么就生成 1000 个word    *  * 思路: *    1、定义一个标签格式..本例中是:$(xxx) *    2、在 word 中编辑好模板样式..另存为html模板。(也可以存为其他格式。但是注意编码问题。不然会乱码) *    3、读取 excel 中的内容并封住为一个容器: list<map<String,String>>  *    4、读取html模板,并根据标签替换内容。再重新写个文件。  *     * **************************************************************** *  */StringBuffer sb = new StringBuffer();Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日");for (int i = 0; i < list.size(); i++) {Map<String, String> map = list.get(i);sb.append(map.get("town")).append("-").append(map.get("village")).append("-").append(map.get("name"));map.put("date", sdf.format(date));word.replaceTemplate("f://xsjsj//template.htm", "f://xsjsj//doc//"+sb.toString()+".doc", map);sb.setLength(0);}/* * **************************************************************** * 下面的一个内容连续的 word 的代码.. *  * 业务:excle 有 1000 个人..需要连续打印出 1000 个人的通知书。 *  * 功能:如果excle 中有 1000条 记录,那么就生成一个 1000 也的 word,  *  * 思路: *    1、定义一个标签格式..本例中是:$(xxx) *    2、在 word 中编辑好模板样式..另存为html模板。但是这里要注意,我们要打开 html 的源码, *       分解源码为:头部和中间、底部等三部分。(底部模板简单。所以我就写在代码中了), *    3、读取 excel 中的内容并封住为一个容器: list<map<String,String>>  *    4、读取html头部和中间、底部模板,并根据标签替换中间模板内容。替换完后,在加底部文件。重写文件。生成一个连续的有分页符的word  *     *     * **************************************************************** *  *///word.replaceTemplateAll("f://xsjsj//tem_top.htm","f://xsjsj//tem_center.htm", "f://xsjsj//doc2//jisj.doc", list);}}

?

?

? 真是辛苦...我发现些文档比代码辛苦多了。。。。哈哈。。。我在上传工程和测试的文档。。。。

?

? 需要的下载啊。。。里面的测试文件数据均为测试数据。。如果运行程序..注意文件的名称修改一致。。。。

?

? 注意路径问题。。我没有判断啊。。O(∩_∩)O哈哈~

读书人网 >编程

热点推荐