Java导出word之POI生成word表格

package com.ruoyi.system.utils;
import com.ruoyi.system.domain.DmWorkTask;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import java.io.FileOutputStream;
import java.math.BigInteger;
import java.util.List;
public class Work_explord {
	/**
		savePath---保存路径
		listspec---测试数据(数据库查出来封装到了list)
	*/
    public static void createSimpleTable(String savePath, List<DmWorkTask> listspec) throws Exception {
        XWPFDocument xdoc = new XWPFDocument();
            CTSectPr sectPr = xdoc.getDocument().getBody().addNewSectPr();
            CTPageSz pgSz = sectPr.isSetPgSz() ? sectPr.getPgSz() : sectPr.addNewPgSz();
            pgSz.setW(BigInteger.valueOf(15840));
            pgSz.setH(BigInteger.valueOf(11907));
            pgSz.setOrient(STPageOrientation.LANDSCAPE);
            XWPFParagraph xp = xdoc.createParagraph();
            xp.setSpacingBefore(0);
            XWPFRun r1 = xp.createRun();
            XWPFRun r2 = xp.createRun();
            r1.setText("工 作 情 况 登 记 表");
            r1.addBreak(); // 换行
            r2.setText("________年");
            r1.setFontFamily("宋体");
            r1.setFontSize(16);
            r1.setTextPosition(10);
            r1.setBold(true);
            xp.setAlignment(ParagraphAlignment.CENTER);
            Integer col_total_count = 9; // 表格最多的列数
            Integer data_count = listspec.size(); // 需要创建的总条数
            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("12000"));
            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));
            setCellText(xdoc, xTable.getRow(i).getCell(4), "累计时间(h)", "FFFFFF", getCellWidth(4));
            setCellText(xdoc, xTable.getRow(i).getCell(5), "环境温度(°C)", "FFFFFF", getCellWidth(5));
            setCellText(xdoc, xTable.getRow(i).getCell(6), "技术状态", "FFFFFF", getCellWidth(6));
            setCellText(xdoc, xTable.getRow(i).getCell(7), "执行人", "FFFFFF", getCellWidth(7));
            setCellText(xdoc, xTable.getRow(i).getCell(8), "备  注", "FFFFFF", getCellWidth(8));
            // 创建表格内容
            i++;
            for (int i2 = 1; i2 <= data_count; i2++) {
                XWPFTableRow row = xTable.insertNewTableRow(i2);
                row.setHeight(500);

                for (int j = 0; j < col_total_count; j++) {
                    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){
                        cell.setText(listspec.get(i2-1).getTaskName());
                    }if (j==1){
                        cell.setText(listspec.get(i2-1).getBootReason());
                    }if (j==2){
                        cell.setText(listspec.get(i2-1).getBootTime());
                    }if (j==3){
                        cell.setText(listspec.get(i2-1).getShutdownTime());
                    }if (j==4){
                        cell.setText(String.valueOf(listspec.get(i2-1).getTimeSum()));
                    }if (j==5){
                        cell.setText(listspec.get(i2-1).getTemperature());
                    }if (j==6){
                        cell.setText(listspec.get(i2-1).getStatus());
                    }if (j==7){
                        cell.setText(listspec.get(i2-1).getExecutionUser());
                    }if (j==8){
                        cell.setText(listspec.get(i2-1).getRemark());
                    }
                }
            }
        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 xDocument, XWPFTableCell cell,
                                    String text, String bgcolor, int width) {
        CTTc cttc = cell.getCTTc();
        CTTcPr cellPr = cttc.addNewTcPr();
        cellPr.addNewTcW().setW(BigInteger.valueOf(width));
        cell.setColor(bgcolor);
        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
        CTTcPr ctPr = cttc.addNewTcPr();
        ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
        cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
        cell.setText(text);
    }
    /**
     * 设置列宽
     *
     * @param index
     * @return
     */
    private static int getCellWidth(int index) {
        int cwidth = 2000;
        return cwidth;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值