java POI往word文档中指定位置插入表格

import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.math.BigInteger;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.poi.POIXMLDocument;import org.apache.poi.util.IOUtils;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;import org.apache.xmlbeans.XmlCursor;import org.docx4j.TraversalUtil;import org.docx4j.dml.wordprocessingDrawing.Inline;import org.docx4j.finders.RangeFinder;import org.docx4j.openpackaging.packages.WordprocessingMLPackage;import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;import org.docx4j.wml.Body;import org.docx4j.wml.CTBookmark;import org.docx4j.wml.Document;import org.docx4j.wml.Drawing;import org.docx4j.wml.ObjectFactory;import org.docx4j.wml.P;import org.docx4j.wml.R;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.data.general.DefaultPieDataset;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;import org.springframework.stereotype.Service;import com.google.common.collect.Lists;import com.google.common.collect.Maps;

public class ExportBgServiceImpl {    private static final String bookmark = "tpBookmark";// 报告图片位置的书签名            public void exportBg(OutputStream out) {        String srcPath = "D:/tp/fx.docx";        String targetPath = "D:/tp/fx2.docx";        String key = "$key";// 在文档中需要替换插入表格的位置        XWPFDocument doc = null;        File targetFile = null;        try {            doc = new XWPFDocument(POIXMLDocument.openPackage(srcPath));            List<XWPFParagraph> paragraphList = doc.getParagraphs();            if (paragraphList != null && paragraphList.size() > 0) {                for (XWPFParagraph paragraph : paragraphList) {                    List<XWPFRun> runs = paragraph.getRuns();                    for (int i = 0; i < runs.size(); i++) {                        String text = runs.get(i).getText(0).trim();                        if (text != null) {                            if (text.indexOf(key) >= 0) {                                runs.get(i).setText(text.replace(key, ""), 0);                                XmlCursor cursor = paragraph.getCTP().newCursor();                                // 在指定游标位置插入表格                                XWPFTable table = doc.insertNewTbl(cursor);                                CTTblPr tablePr = table.getCTTbl().getTblPr();                                CTTblWidth width = tablePr.addNewTblW();                                width.setW(BigInteger.valueOf(8500));                                                                this.inserInfo(table);                                                                break;                            }                        }                    }                }            }                  doc.write(out);            out.flush();            out.close();        } catch (Exception e) {            throw new SysException(ERRORConstants.COMMON_SYSTEM_ERROR, e);        }    }    /**     * 把信息插入表格     * @param table     * @param data     */    private void inserInfo(XWPFTable table) {        List<DTO> data = mapper.getInfo();//需要插入的数据        XWPFTableRow row = table.getRow(0);        XWPFTableCell cell = null;        for (int col = 1; col < 6; col++) {//默认会创建一列,即从第2列开始            // 第一行创建了多少列,后续增加的行自动增加列            CTTcPr cPr =row.createCell().getCTTc().addNewTcPr();            CTTblWidth width = cPr.addNewTcW();            if(col==1||col==2||col==4){                width.setW(BigInteger.valueOf(2000));            }        }        row.getCell(0).setText("指标");        row.getCell(1).setText("指标说明");        row.getCell(2).setText("公式");        row.getCell(3).setText("参考值");        row.getCell(4).setText("说明");        row.getCell(5).setText("计算值");        for(DTO item : data){            row = table.createRow();            row.getCell(0).setText(item.getZbmc());            cell = row.getCell(1);            cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));            cell.setText(item.getZbsm());            cell = row.getCell(2);            cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));            cell.setText(item.getJsgs());            if(item.getCkz()!=null&&!item.getCkz().contains("$")){                row.getCell(3).setText(item.getCkz());            }            cell = row.getCell(4);            cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(2000));            cell.setText(item.getSm());            row.getCell(5).setText(item.getJsjg()==null?"无法计算":item.getJsjg());        }    }}
(0)

相关推荐

  • 来,通过 Excel 来认识神器——POI

    来,通过 Excel 来认识神器——POI

  • java使用POI实现excel文件的导入和导出(通用方法)

    说明: 1.文件导出功能: 通过反射获取实体类的属性名和属性值,写入文件是第一行为属性名,从第二行开始为属性值,调用时只需传入一个任意实体集合(List)即可. 2.文件导入功能 文件导入功能需要定义 ...

  • 如何将Word文档中所有红色文字批量修改为指定格式?

    编辑文档时,有时会遇到需要将指定格式的文字进行格式替换,更换字体颜色.字号.字形等,例如将红色文字替换为微软雅黑.加粗.蓝色,如图 7‑15所示,该怎么办呢? 图7‑15替换红色字体 1 解决方案 查 ...

  • word文档中怎样在口字里打√

    在使用word文档回答问题时,经常会遇到需要在最合适的选项前方的"口"中打√的问题.那么在电脑上打开word文档时,如何给"口"打√呢?下面就让我们一起来了解一 ...

  • 如何批量修改word文档中字母的大小写

    在使用word文档编辑文字的时候,尤其是手动输入的时候往往不能考虑很周全,导致文档中的英文字母的大小写错误,或者由于完成稿件后,boss给出修改意见--文档中的字母的大小写需要修改.对于篇幅较短的文档 ...

  • 菜鸟记128-快速获得WORD文档中的所有图片

    关键词:word2016:网页格式:图片:操作难度*** 阅读目录 步骤1:文档转网页 步骤2:网页资源包里找图片 参考文献 <菜鸟记122-批量提取指定文件名及批量重命名> 咳咳,我们继 ...

  • 菜鸟记158-妙用查找替换批量删除WORD文档中的空行

    注:本图由专业摄影师甜甜溪水授权使用 关键词:WORD2016:批量替换:操作难度** 各位爱学习的教学管理人员,您有没有遇到这样的情况 从网上下(复制)载(粘贴)的参考文献,有很多个空行 图1:假装 ...

  • 菜鸟记321-如何批量为WORD文档替换指定字体?

    万一您身边的朋友用得着呢? 免费咨询热线:如果您有工作中的困惑要和小菜分享或探讨,欢迎您发送邮件至3482197@QQ.COM,咱们一起研究提高. 写在前面的话:今天是小菜本学期最后一个工作日,从明天 ...

  • 如何在word文档中输入对勾

    在使用word填写电子问卷等特殊场合经常需要输入对勾,如何快速在word文档中插入对勾符号呢?word插入对勾的方法非常多,下文仅介绍其中的几种供读者参考,读者可以选择其中的一种或几种作为自己在输入对 ...

  • 如何批量去除word文档中的自动添加的波浪线

    在使用word文档编辑文本的时候,文档会自动在一些文本的下方标注波浪线用以提醒使用者注意.由于word文档不是十分智能,这些提醒会有一些时候错误的.如果使用者不希望看见这些红红绿绿的波浪线,可以关闭这 ...

  • 如何在word文档中插入带边框的对勾

    在之前的文章中,笔者介绍了如何在word文档中插入不带边框的对勾的方法(感兴趣读者可以参考如何在word文档中输入对勾),在有些调查问卷或文档中要求输入带有边框的对勾,如何输入带有边框的对勾呢?其输入 ...