读取或写入word文档

package cn.piesat.tj.common.utils;

import com.itextpdf.text.Element;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpServletResponse;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;

public class WordUtil {



    public static void exportToWord(HttpServletResponse response, List objData, String sheetName, String[] columns) {
        try{
            XWPFDocument xdoc = new XWPFDocument();
            XWPFParagraph xp = xdoc.createParagraph();
            xp.setSpacingBefore(0);
            XWPFRun r1 = xp.createRun();
            r1.setText(sheetName);
            r1.setFontFamily("宋体");
            r1.setFontSize(16);
            r1.setTextPosition(10);
            r1.setBold(true);
            xp.setAlignment(ParagraphAlignment.CENTER);

            Integer col_total_count = columns.length; // 表格最多的列数

            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 k = 0; //第几行
            xTable.getRow(k++).setHeight(500);
            for (int i = 0; i < col_total_count; i++) {
                setCellText(xdoc, xTable.getRow(0).getCell(i), columns[i], "FFFFFF", getCellWidth(0));
            }
            //添加表内容
            //判断表中是否有数据
            if (objData != null && objData.size() > 0) {
                //循环写入表中数据
                for (int i = 0; i < objData.size(); i++) {

                    //转换成map集合{activyName:测试功能,count:2}
                    Map map = (Map) objData.get(i);

                    //循环输出map中的子集:既列值
                    int j = 0;
                    //设置行的宽度
                    XWPFTableRow row = xTable.insertNewTableRow(k++);
                    row.setHeight(450);
                    for (Object o : map.keySet()) {
                        //ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)
                        if (StringUtils.isEmpty(map.get(o))) {
                            map.put(o, "");
                        }
                        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(j)));
                        cell.setText(String.valueOf(map.get(o)));
                        j++;
                    }
                }
            }
            xdoc.write(response.getOutputStream());
        } catch (Exception e) {
        e.printStackTrace();
        }
    }
    /**
     * 设置表头内容
     *
     * @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 = 1000;
        if (index == 0) {
            cwidth = 2100;
        } else if (index == 1) {
            cwidth = 2100;
        } else if (index == 2) {
            cwidth = 2100;
        } else if (index == 3) {
            cwidth = 2100;
        }
        return cwidth;
    }
    /**
     * 下载word
     * @author lygigsh
     * @param response
     * @param filename 文件名
     * @param listData 数据源
     * @param sheetName 表头名称
     * @param columns 列名称集合,如:{物品名称,数量,单价}
     */
    public static void exportWord(HttpServletResponse response, String filename, List listData, String sheetName, String[] columns)throws Exception
    {
        //调用上面的方法、生成Excel文件
        response.setContentType("application/msword;charset=UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename="+new String( filename.getBytes("gb2312"), "ISO8859-1" ));
        exportToWord(response, listData, sheetName, columns);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值