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);
}
}
导出word文档
最新推荐文章于 2022-06-08 12:16:28 发布
这个Java代码示例展示了如何利用Apache POI和iText库将数据导出到Word文档中。它创建了一个包含表头和内容的表格,设置了单元格的样式,包括字体、颜色和对齐方式,并调整了列宽。方法`exportToWord`用于生成实际的Word文件,而`exportWord`则处理下载过程。
摘要由CSDN通过智能技术生成