easypoi导出word换行(easypoi导出数字类型)

如果遇到poi读取例如{name}不能识别为一个整体,可以使用word的域操作,如果不太清楚域的使用,可以这么操作,先在text文档中写好,例如{name},然后再整个复制到word中,不要一个一个在word中敲,不然有可能不会被poi识别为一个整体 XWPFDocument对象 POI是apache提供的可以操作word文档的第三方jar。POI能操作word是使用XWPFDocument对象。…

假如碰到poi载入例如{name}不可以鉴别为一个总体,可以应用word的域操作,假如不太清晰域的应用,可以那么操作,先往text文档中写好,例如{name},随后再全部拷贝到word中,不必一个一个在word中敲,要不然有可能不可能被poi鉴别为一个总体

XWPFDocument对象

POI是apache给予的可以操作word文档的第三方jar。POI能操作word是应用XWPFDocument对象。

  • XWPFDocument对象可以解析docx文件,在XWPFDocument对象根据键入流解析docx的情况下,会获取到docx文档中的各种各样对象,例如报表,文段,照片等,根据操作XWPFDocument对象就可以改动模板內容
  • XWPFDocument API构造org.apache.poi.xwpf.usermodel.XWPFDocument
  • XWPFDocument 给予write(OutputStream stream)方式将调整后的对象再次载入xml并形成新的docx

根据XWPFDocument 可以取得的docx中的各种各样对象

POI操作word模板并生成新的word

要实际操作根据XWPFDocument 可以取得的docx中的各种各样对象,大家离不了一个对象为XWPFRun对象,API构造
org.apache.poi.xwpf.usermodel.XWPFRun。其叙述为:XWPFRun object defines a region of text with a common set of properties。根据叙述大家不难理解其功效为设定文字对象的各类特性。

根据XWPFDocument 获取对象

//解析docx模板并获取document对象
XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
//获取全部文字对象
List<XWPFParagraph> allParagraph = document.getParagraphs();
//获取全部报表对象
List<XWPFTable> allTable = document.getTables();
//获取照片对象
XWPFPictureData pic = document.getPictureDataByID(\"PICId\");

最先建一个很容易的word模板001.docx,大家根据操作对象获取word中的文字內容

POI操作word模板并生成新的word

下边demo的输入输出可以看到大家操作文字对象,取得成功获取了文字內容

@Component(\"xWPRUNTest\")
public class XWPRUNTest {
    //模板文档详细地址
    private static String inputUrl = \"C:\\Users\\zhihe\\Desktop\\demo\\001.docx\";
    public void runTest(){
        try {
            //解析docx模板并获取document对象
            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
            //获取全部文字对象
            List<XWPFParagraph> allParagraph = document.getParagraphs();
            //获取XWPFRun对象导出全部文字內容
            StringBuffer tempText = new StringBuffer();
            for (XWPFParagraph xwpfParagraph : allParagraph) {
                    List<XWPFRun> runList = xwpfParagraph.getRuns();
                    for (XWPFRun xwpfRun : runList) {
                        tempText.append(xwpfRun.toString());
                    }
            }
            System.out.println(tempText.toString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

检测

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(\"classpath:applicationContext.xml\")
public class runTest {
    @Resource
    private XWPRUNTest xWPRUNTest;
    @Test
    public void runTest(){
        xWPRUNTest.runTest();
    }

}

控制面板导出结论

POI操作word模板并生成新的word

在这儿发觉操作文字对象的情况下并并没有获取到报表文字,因此如果我们必须获取到报表文字还要另一个的操作

@Component(\"xWPRUNTableTest\")
public class XWPRUNTableTest {
    //模板文档详细地址
    private static String inputUrl = \"C:\\Users\\zhihe\\Desktop\\demo\\001.docx\";
    public void tableTest(){
        try {
            StringBuffer tableText = new StringBuffer();
            //解析docx模板并获取document对象
            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
            //获取所有报表对象
            List<XWPFTable> allTable = document.getTables();
            for (XWPFTable xwpfTable : allTable) {
                //获取表格行数据信息
                List<XWPFTableRow> rows = xwpfTable.getRows();
                for (XWPFTableRow xwpfTableRow : rows) {
                    //获取报表表格中数据信息
                    List<XWPFTableCell> cells = xwpfTableRow.getTableCells();
                    for (XWPFTableCell xwpfTableCell : cells) {
                        List<XWPFParagraph> paragraphs = xwpfTableCell.getParagraphs();
                        for (XWPFParagraph xwpfParagraph : paragraphs) {
                            List<XWPFRun> runs = xwpfParagraph.getRuns();
                            for(int i = 0; i < runs.size();i  ){
                                XWPFRun run = runs.get(i);
                                tableText.append(run.toString());
                            }
                        }
                    }
                }
            }
            System.out.println(tableText.toString());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

检测
取得成功获取报表

POI操作word模板并生成新的word

下边大家来对一个wrod开展简洁的改动,最先有一个模板word,里边仅有几个字

POI操作word模板并生成新的word

编码

public class FirstWordTest {
        //模板文档详细地址
        private static String inputUrl = \"C:\\Users\\zhihe\\Desktop\\demo\\001.docx\";
        //新制造的模板文档
        private static String outputUrl = \"C:\\Users\\zhihe\\Desktop\\demo\\test.docx\";
        /**
         * 
         * @param inputUrl 模板路径
         * @param outputUrl 模板储存路径
         */
        public static void changeWord(String inputUrl, String outputUrl ){
            try {
                //获得word文档分析对象
                XWPFDocument doucument = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
                //获得文段文字对象
                List<XWPFParagraph> paragraph = doucument.getParagraphs();
                //获得第一行run对象
                XWPFRun run = paragraph.get(0).getRuns().get(0);
                //设定文字內容
                run.setText(\"改动了的word\");
                //生成新的word
                File file = new File(outputUrl);
                FileOutputStream stream = new FileOutputStream(file);
                doucument.write(stream);
                stream.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        public static void main(String[] args) {
            changeWord(inputUrl,outputUrl);
        }
}

检测
运作后生成新的word

POI操作word模板并生成新的word

可是在具体项目中并并没有那么简单,模板文本文档中很有可能必须更换文字中的文本,也有可能必须更换报表对象中的文本,或是在特定报表中插进数据信息,下边咱们就模仿实际情况来做一个简易的模板。

最先建立一个word的模板

POI操作word模板并生成新的word

java工具

package com.lovo.utils.wordToPdf;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;

/**
 * 根据word模板生成新的wordjava工具
 * 
 * @author zhiheng
 * 
 */
public class WorderToNewWordUtils {

    /**
     * 依据模板生成新word文档
     * 分辨报表是必须更换或是必须插进,分辨逻辑性有$为更换,报表无$为插进
     * @param inputUrl 模板储放详细地址
     * @param outPutUrl 新文本文档储放详细地址
     * @param textMap 必须更换的数据结合
     * @param tableList 必须添加的报表信息内容结合
     * @return 取得成功回到true,不成功回到false
     */
    public static boolean changWord(String inputUrl, String outputUrl,
            Map<String, String> textMap, List<String[]> tableList) {
        //模板变换默认设置取得成功
        boolean changeFlag = true;
        try {
            //获得docx分析对象
            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
            //解析更换文字文段对象
            WorderToNewWordUtils.changeText(document, textMap);
            //分析更换报表对象
            WorderToNewWordUtils.changeTable(document, textMap, tableList);
            //生成新的word
            File file = new File(outputUrl);
            FileOutputStream stream = new FileOutputStream(file);
            document.write(stream);
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
            changeFlag = false;
        }
        return changeFlag;

    }

    /**
     * 更换文段文字
     * @param document docx分析对象
     * @param textMap 必须更换的数据结合
     */
    public static void changeText(XWPFDocument document, Map<String, String> textMap){
        //获得文段结合
        List<XWPFParagraph> paragraphs = document.getParagraphs();
        for (XWPFParagraph paragraph : paragraphs) {
            //分辨此文段情况下必须开展更换
            String text = paragraph.getText();
            if(checkText(text)){
                List<XWPFRun> runs = paragraph.getRuns();
                for (XWPFRun run : runs) {
                    //更换模板原先部位
                    run.setText(changeValue(run.toString(), textMap),0);
                }
            }
        }
    }
    /**
     * 更换报表对象方式
     * @param document docx分析对象
     * @param textMap 必须更换的数据结合
     * @param tableList 必须添加的报表信息内容结合
     */
    public static void changeTable(XWPFDocument document, Map<String, String> textMap,
            List<String[]> tableList){
        //获得报表目标结合
        List<XWPFTable> tables = document.getTables();
        for (int i = 0; i < tables.size(); i  ) {
            //只解决个数高于或等于2的报表,且不循环系统表头
            XWPFTable table = tables.get(i);
            if(table.getRows().size()>1){
                //分辨报表是必须更换或是必须插进,分辨逻辑性有$为更换,报表无$为插进
                if(checkText(table.getText())){
                    List<XWPFTableRow> rows = table.getRows();
                    //解析xml报表,并更换模版
                    eachTable(rows, textMap);
                }else{
//                  System.out.println(\"插进\" table.getText());
                    insertTable(table, tableList);
                }
            }
        }
    }

    /**
     * 解析xml报表
     * @param rows 表格行目标
     * @param textMap 必须更换的数据结合
     */
    public static void eachTable(List<XWPFTableRow> rows ,Map<String, String> textMap){
        for (XWPFTableRow row : rows) {
            List<XWPFTableCell> cells = row.getTableCells();
            for (XWPFTableCell cell : cells) {
                //分辨表格中是不是必须更换
                if(checkText(cell.getText())){
                    List<XWPFParagraph> paragraphs = cell.getParagraphs();
                    for (XWPFParagraph paragraph : paragraphs) {
                        List<XWPFRun> runs = paragraph.getRuns();
                        for (XWPFRun run : runs) {
                            run.setText(changeValue(run.toString(), textMap),0);
                        }
                    }
                }
            }
        }
    }
    /**
     * 为报表插进数据信息,个数不足加上新行
     * @param table 必须插进数据信息的报表
     * @param tableList 插进数据信息结合
     */
    public static void insertTable(XWPFTable table, List<String[]> tableList){
        //建立行,依据要添加的数据信息加上新行,不处理表头
        for(int i = 1; i < tableList.size(); i  ){
            XWPFTableRow row =table.createRow();
        }
        //解析xml报表插进数据信息
        List<XWPFTableRow> rows = table.getRows();
        for(int i = 1; i < rows.size(); i  ){
            XWPFTableRow newRow = table.getRow(i);
            List<XWPFTableCell> cells = newRow.getTableCells();
            for(int j = 0; j < cells.size(); j  ){
                XWPFTableCell cell = cells.get(j);
                cell.setText(tableList.get(i-1)[j]);
            }
        }
    }
    /**
     * 分辨文字中情况下包括$
     * @param text 文字
     * @return 包括回到true,不包含返回false
     */
    public static boolean checkText(String text){
        boolean check  =  false;
        if(text.indexOf(\"$\")!= -1){
            check = true;
        }
        return check;
    }
    /**
     * 配对传到信息内容聚集与模版
     * @param value 模板必须更换的地区
     * @param textMap 传到信息内容结合
     * @return 模版必须更换地区信息内容结合相匹配值
     */
    public static String changeValue(String value, Map<String, String> textMap){
        Set<Entry<String, String>> textSets = textMap.entrySet();
        for (Entry<String, String> textSet : textSets) {
            //配对模版与更换值 文件格式${key}
            String key = \"${\" textSet.getKey() \"}\";
            if(value.indexOf(key)!= -1){
                value = textSet.getValue();
            }
        }
        //模版未配对到地区更换为空
        if(checkText(value)){
            value = \"\";
        }
        return value;
    }
    public static void main(String[] args) {
        //模版文档详细地址
        String inputUrl = \"C:\\Users\\zhihe\\Desktop\\demo\\001.docx\";
        //新制造的模版文档
        String outputUrl = \"C:\\Users\\zhihe\\Desktop\\demo\\test.docx\";
        Map<String, String> testMap = new HashMap<String, String>();
        testMap.put(\"name\", \"小亮\");
        testMap.put(\"sex\", \"男\");
        testMap.put(\"address\", \"科技园\");
        testMap.put(\"phone\", \"88888888\");
        List<String[]> testList = new ArrayList<String[]>();
        testList.add(new String[]{\"1\",\"1AA\",\"1BB\",\"1CC\"});
        testList.add(new String[]{\"2\",\"2AA\",\"2BB\",\"2CC\"});
        testList.add(new String[]{\"3\",\"3AA\",\"3BB\",\"3CC\"});
        testList.add(new String[]{\"4\",\"4AA\",\"4BB\",\"4CC\"});
        WorderToNewWordUtils.changWord(inputUrl, outputUrl, testMap, testList);
    }
}

检测

POI操作word模板并生成新的word

那么大家就保持了个简便的POI实际操作模版进行更换和插进的作用,原本还提前准备完成固定不动部位添加图片的作用,但是发觉这也是个巨坑,临时未完成其作用,等之后有时间再开展健全,此编码以docx文件格式开展演试实际操作

假如碰到poi载入例如{name}不可以鉴别为一个总体,可以应用word的域实际操作,假如不太清晰域的应用,可以如此实际操作,先往text文本文档中写好,例如{name},随后再全部拷贝到word中,不必一个一个在word中敲,要不然有可能不可能被poi鉴别为一个总体

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年5月12日 下午1:13
下一篇 2022年5月12日 下午1:13

相关推荐

  • 九阳原汁机哪款最实用(出汁率高达90%的一款原汁机推荐)

    随着生活质量的提高人们对饮食也有着一定的变化,合理饮食纳入人们日常生活中的养生环节,研究发现长期服用果汁能够给身体带来很大的变化甚至减少疾病的发生,生活中也不乏爱喝果汁的朋友,但是对于能喝到的果汁又有着一定的担忧,例如"我们喝到的果汁卫生吗?""我们喝到的果汁添加剂多吗?",所以小编倒觉得既爱喝果汁又要健康的宝宝们可以考虑入手一台原汁机,对此呢小编评测了一台机器——九阳便携式mini原汁机,不妨来…

    2022年9月30日
    440
  • 宽带连接629错误的解决办法

    使用电脑宽带拨号上网时,突然遇到连接错误,提示“错误629:连接被远程计算机终止”。遇到629的错误,基本上都是因为被宽带公司给你断开了,不过出现这个错误的原因有很多。下面分享一下宽带629连接错误的原因以及解决办法。

    2022年7月25日
    890
  • windows7电脑清空所有数据怎么恢复

    方法/步骤 1、打开360安全卫士; 2、在360安全卫士主屏幕中,选择右侧的“更多”选项; 3、在弹出的下一个对话框中,选择“文件恢复”选项; 4、在弹出的下一个对话框中,选择“文档文件(未扫描)”选项; 5、在“快速查找”中,输入需要查找的文档,如“到货签收单”,并按“开始扫描”; 6、在扫描结果中,选择误删除的文档,并点击“恢复选中的文件”,即可。 以上就是小编教给大家的Win7系统恢复被删…

    2022年8月4日
    680
  • 创业板怎么开通(创业板股票如何开通)

    在创业板注册制的刺激下,越来越多的投资者关注创业板,以及参与创业板的交易,那么,投资者如何开通创业板呢?其主要方法如下: 1、去营业部开通 满足开通创业板条件的投资者,携带身份证、银行卡等相关资料,在交易日去证券公司的营业部临柜申请开通创业板权限,在开通过程中,投资者需要进行分析测评以及签署风险揭示书。 2、网上申请开通 一般来说是通过证券公司的交易软件开通…

    2022年4月29日
    870
  • 企业网络设计方案(企业网络规划与设计)

    所谓的企业网站建设方案,就是指在网站开发的初期,相关负责人对网站进行市场定位、以及网站功能逻辑的规划,并且对各个环节的费用、周期等内容进行罗列,最后形成一份书面报告。企业网站建设方案的重要性对于网站开发是很重要的,具有指导性的作用。那么今天就让火猫君给大家详细介绍一下,怎么制定一份标准企业网站建设方案。 1、网站建设前的市场分析 ①分析行业市场背景、市场行为、是否适合网络营销以及行业在网络营销中的…

    2022年5月13日
    1010
  • 手机录屏怎么录,手把手教你录制屏幕

    手机录屏是我们日常生活中经常会用到的一个功能,现在很多安卓手机更是把录屏功能集成到原生系统中,像魅族最新系统已经把手机录屏功能集成到下拉菜单栏,然而由于苹果官方的限制,录屏应用很难在appstore上架,我们只能通过越狱来实现录屏功能,下面APP匞就为大家分享几款自用的录屏应用。 安卓 易录屏 安卓酱以前录屏都是易录屏,现在用az。 支持安卓5.0以上免Root录屏,傻瓜式操作,一键启动&…

    2022年6月15日
    620
  • 房产销售管理系统程序设计(房源管理系统软件排名)

    房产营销的过程中往往会遇到以下难题:员工管理客户困难,跟进客户无法规范;客户资源转化率低,客户需求信息反馈不真实,人员离职带走公司资源;无数据化管理,没有精细化数据依据,统计效率低;财务信息不同步。面对这些问题,链讯科技专为圣家开发了这款房产客户管理系统。 房地产客户管理系统,crm管理系统   此系统包含了实用的客户关系管理理念,管理整个客户的生命周期,为房地产销售实现客户价值最大化。同时系…

    2022年5月13日
    840
  • excel最新版本是多少(excel零基础教程)

    Excel非常强大,这一点毋庸置疑。随便举几个例子,就能触碰到你的知识盲点: ❶数据透视表,鼠标拖拽轻松完成数据统计; ❷函数公式,解决你的各种表格需求; ❸PowerQuery,Excel2016及以上版本内置数据处理插件; ❹DAX数据建模,轻松搞定千万级数据量。 强大的一个副作用就是,让Excel的学习成本变得越来越高!解决一个小问题,要花上几个小时的时间去学习。而大部分用户,更需要的是一些…

    2022年5月13日
    990
  • 软文兼职是真是假,揭秘其真正的盈利模式

    软文代发平台可有偿删稿 不少平台提供发文、代写服务,收费数十元到上万元,不审核真假;律师称平台涉嫌非法经营罪 近日,记者注册“软文库”,页面显示报价单,不同媒体发布价格不同,还有不同的出稿率和投放须知,平台还提供文章代写服务。 9月7日,新华网一份声明将自我炒作的史润龙曝光。济南警方经过调查发现,史润龙编造各种头衔,找他人代写文章在网上发布,造成恶劣社会影响。 记者调查发现,网上有不少所谓的软文发…

    2022年10月7日
    450
  • 外卖app有哪些,十大外卖平台排名

    对于宅男,宅女和办公室的加班族来说!外卖真的是拯救我们的一大利器,外卖的诞生,让我们有了各种宅下去的理由。不管何时,不管何地,只要你饿了,打开外卖APP就会有送餐小哥把可口的外卖送到你的门前,这种体验真正的感受到了用户就是上帝这句话为什么存在了~同时外卖的诞生,对于上班族来说,每天吃什么也变得多样性起来,想吃什么吃什么,选择性变多了,也更加的适合快节奏的生活。 说起定外卖,也比以前容易的多,以前是…

    2022年6月23日
    870

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信