`
m17165851127
  • 浏览: 15052 次
文章分类
社区版块
存档分类
最新评论

java生成word文档

 
阅读更多

定义一个工具类wordUtil:

package com.keji.service.utils;

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//from fhadmin.cn
public class docUtil {

    public static XWPFDocument replaceDoc(String srcPath, Map<String, Object> param) {
        try {
            // 读取word模板
            InputStream fis = new FileInputStream(srcPath);
            XWPFDocument doc = new XWPFDocument(fis);
            //处理段落
            List<XWPFParagraph> paragraphList = doc.getParagraphs();
            processParagraph(paragraphList,doc,param);
            //处理表格
            Iterator<XWPFTable> it = doc.getTablesIterator();
            while (it.hasNext()) {
                XWPFTable table = it.next();
                List<XWPFTableRow> rows = table.getRows();
                for (XWPFTableRow row : rows) {
                    List<XWPFTableCell> cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        List<XWPFParagraph> paragraphListTable =  cell.getParagraphs();
                        processParagraph(paragraphListTable, doc, param);
                    }
                }
            }
            return doc;
        }
        catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    public static void processParagraph(List<XWPFParagraph> paragraphList, XWPFDocument doc, Map<String, Object> param) {
        if(paragraphList != null && paragraphList.size() > 0) {
            for (XWPFParagraph paragraph : paragraphList) {
                List<XWPFRun> runs = paragraph.getRuns();
                for (XWPFRun run : runs) {
                    String runString = run.toString();
                    Matcher m = Pattern.compile("\\$\\{(.*?)}").matcher(runString);
                    if (m.find()) {
                        boolean isSetText = false;
                        for (Map.Entry<String, Object> entry : param.entrySet()) {
                            String key = entry.getKey();
                            if (runString.indexOf(key) != -1) {
                                isSetText = true;
                                Object value = entry.getValue();
                                if (entry.getValue() == null || entry.getValue().equals("")){
                                    value = "未填写";
                                }
                                runString = runString.replace(key, value.toString());
                            }
                        }
                        if (isSetText) {
                            run.setText(runString, 0);
                        }
                    }
                }
            }
        }
    }
}



Map<String, Object> map=new HashMap<String, Object>();

//文档里面的列名为${name}和${sex}
map.put("${name}", "姓名");
map.put("${sex}", "性别");

//文件位置和map
XWPFDocument doc = docUtil.replaceDoc("D:\\word\\month.docx", map);

//文件保存位置
OutputStream os = new FileOutputStream("D:\\tttt.doc");
            doc.write(os);
            os.close();
            System.out.println("输出成功!");


最后会有一个奇怪的bug,word文档里的${name}如果是手打上去就可以用,如果是复制上去就会被识别为三个字符串,也就是不能替换,当然也有解决方法,可以把全文复制到win自带的写字板(不需要调任何格式),
然后把原文删了复制回来就行了,复制回来之后不能再改字段了,改了还会出问题,但是可以改样式什么的。这个问题不一定会
0
0
分享到:
评论

相关推荐

    java生成word文档完美解决方案.

    在Java开发中,生成Word文档是一项常见的需求,例如在报告生成、数据导出或合同制作等场景。...实际应用中,根据项目特性和需求选择合适的库,并灵活运用其提供的功能,就能实现Java生成Word文档的“完美解决方案”。

    Java导出Word文档的实现.docx

    在Java开发中,导出Word文档是一项常见的任务,尤其在生成报表、报告或者合同等场合。本文将探讨如何使用Java高效地实现Word文档导出,主要聚焦于利用XDocReport和FreeMarker模板引擎的方式。 首先,Java中导出Word...

    java导出word文档,固定模板

    Java 导出Word文档是一项常见的任务,特别是在企业级应用中,比如报告生成、合同模板等。本教程将重点介绍如何利用Freemarker技术实现这一功能,特别是如何将Word模板转化为可编程填充的数据模板。 首先,让我们...

    java生成word的实例 java导出Word文档的实例

    这个实例将带你了解如何在Java环境中使用API来创建和导出Word文档。以下是一些关键的知识点: 1. **Apache POI库**: Apache POI是Java社区开发的一个开源项目,提供了读写Microsoft Office格式文件的能力,包括...

    java生成word的实例 java导出Word文档的实例.rar

    本实例将探讨如何使用Java技术来创建和导出Word文档。主要涉及的技术栈包括Apache POI库,它是一个强大的API,允许开发者处理Microsoft Office格式的文件,包括Word(.doc和.docx)。 Apache POI提供了HSSF和XSSF两...

    java数据源导出WORD文档(包括图片、表格及文本)

    最近因项目开发的需要,整理了一份用JAVA导出WORD文档,其部署步骤如下: 1、将jacob-1.14.3-x86.dll放在服务器的系统盘(或运行本机的系统):\WINDOWS\system32目录下。 2、将jacob-1.14.3-x86.dll放在JDK 的 bin ...

    JAVA 导出WORD

    在Java编程环境中,导出Word文档是一项常见的任务,特别是在企业级应用中,如报表生成、数据导出等。本文将详细讲解如何使用Java实现Word文档的导出,并着重介绍涉及的库和关键技术。 首先,标题"JAVA 导出WORD"指...

    java导出word文档

    Java 导出 Word 文档是一项常见的任务,在许多企业级应用中都有所应用,例如报告生成、数据导出等。在本教程中,我们将探讨如何利用 FreeMarker 模板引擎来实现这一功能。FreeMarker 是一个强大的、开源的模板语言,...

    java 生成Word文档-模板示例

    Java 生成 Word 文档-模板示例 Java 生成 Word 文档-模板示例是 Java 开发语言中的一种常见应用场景,通过使用 Java 语言,可以生成 Word 文档,以满足业务需求。下面是该示例中涉及到的知识点: 1. Java 模板引擎...

    Java使用POI导出Word文档

    Java使用Apache POI库导出Word文档是一种常见的技术实践,特别是在企业级应用中,用于生成报告、合同或者自定义的数据输出。Apache POI是Apache软件基金会的一个开源项目,它提供了处理Microsoft Office格式(如Word...

    用java生成word文档方法

    在IT领域,特别是软件开发行业中,使用Java生成Word文档是一种常见的需求,特别是在自动化报告生成、文档模板填充等场景中。本文将深入探讨如何利用Java语言和相关库来实现这一功能,重点介绍Apache POI和一个相对...

    java生成word文档.pdf

    "Java 生成 Word 文档" 本文主要介绍了使用 Java 生成 Word 文档的方法,通过使用 iText 库来生成 PDF 文件,并将其转换为 Word 文档。下面是相关的知识点: 1. iText 库简介 iText 是一个 Java 类库,能够快速...

    java 根据word模板生成word 文档

    ### Java生成Word文档技术解析与实现 在现代企业级应用中,动态生成Word文档的需求日益增多,尤其是在报表生成、文档自动生成等领域。Java作为一种广泛使用的编程语言,提供了多种方法来根据Word模板生成Word文档,...

    java导出图片到word文档

    在Java编程中,将图片导出到Word文档是一项常见的任务,尤其在自动化报告生成或数据可视化等场景下。本文将详细介绍如何使用Java实现这一功能,包括必要的库、步骤以及可能出现的问题。 首先,我们需要一个能够处理...

    java导出word文档相关jar

    Java导出Word文档是开发过程中常见的一项任务,尤其在企业级应用中,为了实现数据的导出和报告生成,这项技术尤为重要。Apache POI库是一个强大的开源项目,它提供了读写Microsoft Office格式文件的能力,包括Word...

    java生成word文档代码详解

    ### Java生成Word文档代码详解 #### 一、引言 在日常工作中,有时我们需要通过程序自动生成Word文档,尤其是在报表生成、数据导出等场景下。利用Java来生成Word文档不仅可以提高工作效率,还能确保文档的一致性和...

    用java生成word文档

    博文链接:https://guoyiqi.iteye.com/blog/78638

Global site tag (gtag.js) - Google Analytics