poi导出word表格跨行

DataCommon.java

package com.ksource.pwlp.model.statistic;

public class DataCommon {

    private Long id;
    private String name;
    private String otherName;
    private String dataName;
    private String otherDataName;
    private int value;
    private float otherValue;
    private double othersValue;
    private String dataValue;
    private Long otherDataValue;
    private int oneResult;
    private int twoResult;
    private int threeResult;
    private int fourResult;
    private int fiveResult;
    private int sixResult;
    private float oneValue;
    private float twoValue;
    private float threeValue;
    private float fourValue;
    private float fiveValue;
    private float sixValue;
    private double oneVal;
    private double twoVal;
    private double threeVal;
    private double fourVal;
    private double fiveVal;
    private double sixVal;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getOtherName() {
        return otherName;
    }
    public void setOtherName(String otherName) {
        this.otherName = otherName;
    }
    public String getDataName() {
        return dataName;
    }
    public void setDataName(String dataName) {
        this.dataName = dataName;
    }
    public String getOtherDataName() {
        return otherDataName;
    }
    public void setOtherDataName(String otherDataName) {
        this.otherDataName = otherDataName;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
    public float getOtherValue() {
        return otherValue;
    }
    public void setOtherValue(float otherValue) {
        this.otherValue = otherValue;
    }
    public double getOthersValue() {
        return othersValue;
    }
    public void setOthersValue(double othersValue) {
        this.othersValue = othersValue;
    }
    public String getDataValue() {
        return dataValue;
    }
    public void setDataValue(String dataValue) {
        this.dataValue = dataValue;
    }
    public Long getOtherDataValue() {
        return otherDataValue;
    }
    public void setOtherDataValue(Long otherDataValue) {
        this.otherDataValue = otherDataValue;
    }
    public int getOneResult() {
        return oneResult;
    }
    public void setOneResult(int oneResult) {
        this.oneResult = oneResult;
    }
    public int getTwoResult() {
        return twoResult;
    }
    public void setTwoResult(int twoResult) {
        this.twoResult = twoResult;
    }
    public int getThreeResult() {
        return threeResult;
    }
    public void setThreeResult(int threeResult) {
        this.threeResult = threeResult;
    }
    public int getFourResult() {
        return fourResult;
    }
    public void setFourResult(int fourResult) {
        this.fourResult = fourResult;
    }
    public int getFiveResult() {
        return fiveResult;
    }
    public void setFiveResult(int fiveResult) {
        this.fiveResult = fiveResult;
    }
    public int getSixResult() {
        return sixResult;
    }
    public void setSixResult(int sixResult) {
        this.sixResult = sixResult;
    }
    public float getOneValue() {
        return oneValue;
    }
    public void setOneValue(float oneValue) {
        this.oneValue = oneValue;
    }
    public float getTwoValue() {
        return twoValue;
    }
    public void setTwoValue(float twoValue) {
        this.twoValue = twoValue;
    }
    public float getThreeValue() {
        return threeValue;
    }
    public void setThreeValue(float threeValue) {
        this.threeValue = threeValue;
    }
    public float getFourValue() {
        return fourValue;
    }
    public void setFourValue(float fourValue) {
        this.fourValue = fourValue;
    }
    public float getFiveValue() {
        return fiveValue;
    }
    public void setFiveValue(float fiveValue) {
        this.fiveValue = fiveValue;
    }
    public float getSixValue() {
        return sixValue;
    }
    public void setSixValue(float sixValue) {
        this.sixValue = sixValue;
    }
    public double getOneVal() {
        return oneVal;
    }
    public void setOneVal(double oneVal) {
        this.oneVal = oneVal;
    }
    public double getTwoVal() {
        return twoVal;
    }
    public void setTwoVal(double twoVal) {
        this.twoVal = twoVal;
    }
    public double getThreeVal() {
        return threeVal;
    }
    public void setThreeVal(double threeVal) {
        this.threeVal = threeVal;
    }
    public double getFourVal() {
        return fourVal;
    }
    public void setFourVal(double fourVal) {
        this.fourVal = fourVal;
    }
    public double getFiveVal() {
        return fiveVal;
    }
    public void setFiveVal(double fiveVal) {
        this.fiveVal = fiveVal;
    }
    public double getSixVal() {
        return sixVal;
    }
    public void setSixVal(double sixVal) {
        this.sixVal = sixVal;
    }
}

调用导出word表格代码如下:

List<DataCommon> dataCommonList = new ArrayList<DataCommon>(); //数据是从数据库查出来取需要字段的值存入DataCommon中后存到dataCommonList中

dataCommon.setName("类别列的值");
  dataCommon.setOtherName("证据名称的值");
  dataCommonList.add(dataCommon);

 //dataCommonList中存的值有一定规律,相同类别的是紧邻挨着的

String savePath = this.attachPath + File.separator + ContextUtil.getCurrentUser().getAccount() + "\\" + System.currentTimeMillis() + ".docx";
new CreateTable().createSimpleTable(dataCommonList,savePath);

导出word表格方法如下:

package com.ksource.pwlp.util;

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.math.BigInteger;
import java.util.List;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
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.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;

import com.ksource.core.util.ContextUtil;
import com.ksource.pwlp.model.statistic.DataCommon;

/**
 * 创建证据材料清单表格
 * @author dxy
 *
 */
public class CreateTable {

    public void createSimpleTable(List<DataCommon> dataCommonList, String savePath) throws Exception {
        String orgName = ContextUtil.getCurrentOrg().getOrgName();
        XWPFDocument xdoc = new XWPFDocument();
        XWPFParagraph xp = xdoc.createParagraph();
        xp.setSpacingBefore(0);
        XWPFRun r1 = xp.createRun();
        XWPFRun r2 = xp.createRun();
        r1.setText(orgName);
        r1.setFontFamily("宋体");
        r1.setFontSize(18);
        r1.addBreak(); // 换行
        r2.setText("证据清单");
        r2.setFontFamily("宋体");
        r2.setFontSize(22);
        r2.setTextPosition(10);
        r2.setBold(true);
        r2.addBreak(); // 换行
        xp.setAlignment(ParagraphAlignment.CENTER);

        Integer col_total_count = 4; // 表格最多的列数

        XWPFTable xTable = xdoc.createTable(1, col_total_count);

        CTTbl ttbl = xTable.getCTTbl();
        CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl
                .getTblPr();
        CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr
                .addNewTblW();
        tblWidth.setW(new BigInteger("8600"));
        tblWidth.setType(STTblWidth.DXA);

        // 创建表头数据
        int i = 0;
        xTable.getRow(i).setHeight(500);
        setCellText(xdoc, xTable.getRow(i).getCell(0), "序号", "FFFFFF", getCellWidth(0));
        setCellText(xdoc, xTable.getRow(i).getCell(1), "类别", "FFFFFF", getCellWidth(1));
        setCellText(xdoc, xTable.getRow(i).getCell(2), "证据名称", "FFFFFF", getCellWidth(2));
        setCellText(xdoc, xTable.getRow(i).getCell(3), "备注", "FFFFFF", getCellWidth(3));

        // 创建表格内容
        i++;
        String preGroupName = "";
        String groupName = "";
        int flag = 0;
        int num = 1;
        for (int i2 = i; i2 < dataCommonList.size()+1; i2++) {
            XWPFTableRow row = xTable.insertNewTableRow(i2);
            row.setHeight(450);
            for (int j = 0, j2 = 0; j < col_total_count; j++, j2++) {
                XWPFTableCell cell = row.createCell();
                CTTc cttc = cell.getCTTc();
                CTTcPr cellPr = cttc.addNewTcPr();
                cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
                cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
                cellPr.addNewTcW().setW(BigInteger.valueOf(getCellWidth(j2)));

                if (j == 0) {
                    if(preGroupName.equals(groupName)){
                        cell.setText(String.valueOf(num));
                    }else{
                        cell.setText(String.valueOf(++num));
                    }
                }
                if (j == 1) {
                    cell.setText(dataCommonList.get(i2-1).getName());
                    if(i2 > 1){
                        preGroupName = dataCommonList.get(i2-2).getName();
                    }
                    groupName = dataCommonList.get(i2-1).getName();
                }
                if (j == 2) {
                    cell.setText(dataCommonList.get(i2-1).getOtherName());
                }
                if (j == 3) {
                    cell.setText("");
                }
            }

            if(preGroupName.equals(groupName) && !"".equals(groupName)){
                flag++;
                if(i2 == dataCommonList.size()){
                    mergeCellsVertically(xTable, 0, i2-flag, i2);
                    mergeCellsVertically(xTable, 1, i2-flag, i2);
                    flag = 0;
                }
            }else{
                if(flag > 0){
                    if(i2 < dataCommonList.size()){
                        if(i2 > 1 && !"".equals(preGroupName)){
                            mergeCellsVertically(xTable, 0, i2-1-flag, i2-1);
                            mergeCellsVertically(xTable, 1, i2-1-flag, i2-1);
                            flag = 0;
                        }
                    }
                    if(i2 == dataCommonList.size()){
                        mergeCellsVertically(xTable, 0, i2-1-flag, i2-1);
                        mergeCellsVertically(xTable, 1, i2-1-flag, i2-1);
                        flag = 0;
                    }
                }
            }
        }

        FileOutputStream fos = new FileOutputStream(savePath);
        xdoc.write(fos);
        fos.close();
    }

    /**
     * 设置表头内容
     * @param xDocument
     * @param cell
     * @param text
     * @param bgcolor
     * @param width
     */
    private static void setCellText(XWPFDocument xdoc, XWPFTableCell cell,
            String text, String bgcolor, int width) {
        CTTc cttc = cell.getCTTc();
        CTTcPr cellPr = cttc.addNewTcPr();
        cellPr.addNewTcW().setW(BigInteger.valueOf(width));
        XWPFParagraph paragraph = cell.getParagraphs().get(0);
        paragraph.setAlignment(ParagraphAlignment.CENTER); //设置表头单元格居中
        XWPFRun run  = paragraph.createRun();
        run.setFontFamily("仿宋_GB2312");
        run.setFontSize(16); //设置表头单元格字号
        //run.setBold(true); //设置表头单元格加粗
        run.setText(text);
    }

    /**
     * 设置列宽
     *
     * @param index
     * @return
     */
    private static int getCellWidth(int index) {
        int cwidth = 1000;
        if (index == 0) {
            cwidth = 1000;
        } else if (index == 1) {
            cwidth = 2100;
        } else if (index == 2) {
            cwidth = 3200;
        } else if (index == 3) {
            cwidth = 2100;
        }
        return cwidth;
    }

    /**
     * 跨行合并
     *
     * @param table
     * @param col
     * @param fromRow
     * @param toRow
     */
    public static void mergeCellsVertically(XWPFTable table, int col,
            int fromRow, int toRow) {
        for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
            XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
            if (rowIndex == fromRow) {
                // The first merged cell is set with RESTART merge value
                cell.getCTTc().addNewTcPr().addNewVMerge()
                        .setVal(STMerge.RESTART);
            } else {
                // Cells which join (merge) the first one, are set with CONTINUE
                cell.getCTTc().addNewTcPr().addNewVMerge()
                        .setVal(STMerge.CONTINUE);
            }
        }
    }

    /**
     * 将文件转换成byte数组
     * @param filePath
     * @return
     */
    public byte[] fileToByte(File file){
        byte[] buffer = null;
        try
        {
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int n;
            while ((n = fis.read(b)) != -1)
            {
                bos.write(b, 0, n);
            }
            fis.close();
            bos.close();
            buffer = bos.toByteArray();
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
        return buffer;
    }
}

导出效果图如下:

原文地址:https://www.cnblogs.com/henuyuxiang/p/11819235.html

时间: 2024-10-02 19:39:20

poi导出word表格跨行的相关文章

使用POI导出Word(含表格)的实现方式及操作Word的工具类

转载请注明出处:https://www.cnblogs.com/sun-flower1314/p/10128796.html 本篇是关于利用Apache 的POI导出Word的实现步骤.采用XWPFDocument导出Word,结构和样式完全由代码控制,操作起来还是非常的不太方便,只能够创建简单的word,不能设置样式,功能太少.但在这里还是实现一下,毕竟做过. 首先声明一些基本概念: XWPFDocument代表一个docx文档,其可以用来读docx文档,也可以用来写docx文档 XWPFPa

poi导出word时设置兼容性

接上一篇poi导出word http://www.cnblogs.com/xiufengd/p/4708680.html. public static void setAuto(XWPFDocument doc) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{ List<POIXMLDocumentPart> list = doc.getRelat

poi导出word模板项目实例(一个文件)

在页面上填写值,然后导出到word模板中,并把页面上的值带到模板中,也就是导出word文档,提前有word 的模板形式, 1.jsp 页面   <table class="formTable"> <TR> <TD class="label">会议地点</TD> <TD class="content"> <INPUT id="meetingSite" type=&

c#(.net) 导出 word表格

做了差不多一周的导出Word,现在把代码贴出来   : ExportWord.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Data; 6 using System.IO; 7 8 9 /// <summary> 10 ///DaoChuWord 的摘要说明 11 /// </summary> 12 publ

java中使用poi导出excel表格数据并且可以手动修改导出路径

在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下 jar包下载路径:http://download.csdn.net/download/pumpkin09/7077011 第二步:添加poi导出工具类 1 package com.yjd.admin.util; 2 3 import java.io.IOException; 4 import ja

C# 导出word 表格代码

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Reflection; using System.IO; using System.Data.SqlClient; using System.Data; namespace WebApplicat

poi 导出word,导出表格(复杂表格合并行列)解决方法

如下图:一个table表格,需要作为表格插入到word中: 1.首先对表格做拆分处理 代码如下: private String simplifyTable(String tableContent) { if(StringUtils.isEmpty(tableContent)) return null; Document tableDoc = Jsoup.parse(tableContent); Elements trElements = tableDoc.getElementsByTag("tr

poi导出word、excel

在实际的项目开发中,经常会有一些涉及到导入导出的文档的功能.apache开源项目之一poi对此有很好的支持,对之前的使用做一些简要的总结. 1,导入jar 为了保证对格式的兼容性,在项目的pom.xml添加这三个jar: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.13</version> &l

poi导出word

本测试文档为自己找资料写的一个代码,实现了我所需要的功能,包括页眉页脚,段落剧中,创建表格,表格样式等等. 说一个比较实用的方法,插入分节和设置页面第二页开始时就是用的这种方法:先新建一个docx文件,编辑好自己需要的格式,包括页眉页脚,分页分节等,然后保存,重命名成zip压缩文件,解压后就会发现很多xml文件,这就是word的底层,可以从相关xml里面查找相应的功能. 目前仍存在一个问题就是空格的下滑先不显示,具体解决后续添加 package poi; import java.io.FileN