首页 > 技术文章 > 记录一下表格用poi的导出word

xlj227 2016-07-15 11:06 原文

利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

http://www.cnblogs.com/wzzkaifa/p/7140506.html

java 生成word文档(freemarker)

http://blog.csdn.net/zhangzhangjava/article/details/52937159

 

也是网上找的代码http://53873039oycg.iteye.com/blog/2152009,但是横向合并单元格没成功。只能用很蠢的办法建立了好多table

public void fillTable(XWPFTable table) {
for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) {
XWPFTableRow row = table.getRow(rowIndex);
row.setHeight(380);
for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) {
XWPFTableCell cell = row.getCell(colIndex);
if (rowIndex % 2 == 0) {
setCellText(cell, " cell " + rowIndex + colIndex + " ", "D4DBED", 1000);
} else {
setCellText(cell, " cell " + rowIndex + colIndex + " ", "AEDE72", 1000);
}
}
}
}

public void setCellText(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);
CTTcPr ctPr = cttc.addNewTcPr();
CTShd ctshd = ctPr.addNewShd();
ctshd.setFill(bgcolor);
ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
cell.setText(text);
}

/**
* @Description: 跨列合并
*/
public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {
for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {
XWPFTableCell cell = table.getRow(row).getCell(cellIndex);
if (cellIndex == fromCell) {
// The first merged cell is set with RESTART merge value
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
} else {
// Cells which join (merge) the first one, are set with CONTINUE
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
}
}
}

/**
* @Description: 跨行合并
* @see http://stackoverflow.com/questions/24907541/row-span-with-xwpftable
*/
public 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);
}
}
}

public void setTableWidth(XWPFTable table,String width){
CTTbl ttbl = table.getCTTbl();
CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();
CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();
CTJc cTJc=tblPr.addNewJc();
cTJc.setVal(STJc.Enum.forString("center"));
tblWidth.setW(new BigInteger(width));
tblWidth.setType(STTblWidth.DXA);
}
public void fillTable2(XWPFTable table) {
for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) {
XWPFTableRow row = table.getRow(rowIndex);
row.setHeight(380);
for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) {
XWPFTableCell cell = row.getCell(colIndex);
if (rowIndex % 2 == 0) {
setCellText(cell, " cell " + rowIndex + colIndex + " ", "D4DBED", 1800);
} else {
setCellText(cell, " cell " + rowIndex + colIndex + " ", "AEDE72", 1800);
}
}
}
}
public void createTable(XWPFDocument doc,String str) {
XWPFTable table = null;
table = doc.createTable(1, 1);
setTableWidth(table, "9000");
XWPFTableRow row = null;
row = table.getRow(0);
row.setHeight(380);
XWPFTableCell cell = null;
cell = row.getCell(0);
setCellText(cell, str, "CCCCCC", 9000);

}

@Override
public void exportWord(ServletOutputStream outputStream) {
// Document 对应一个word应用文件
XWPFDocument doc = new XWPFDocument();

/*XWPFTable table1 = doc.createTable(6, 8);
setTableWidth(table1, "8000");
fillTable(table1);
mergeCellsVertically(table1, 1, 1,4);
mergeCellsVertically(table1, 4, 2, 4);
mergeCellsHorizontal(table1, 0, 3, 5);
mergeCellsHorizontal(table1, 2, 2, 3);
mergeCellsHorizontal(table1, 2, 6, 7);*/

createTable(doc,"renyuanxinxi");

XWPFTable table1 = doc.createTable(1, 6);
XWPFTableRow row0 = table1.getRow(0);
row0.setHeight(380);
XWPFTableCell cell = null;
cell = row0.getCell(0);
setCellText(cell, " 编号", "FFFFFF", 1500);
cell = row0.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 1500);
cell = row0.getCell(2);
setCellText(cell, " 姓名", "FFFFFF", 1500);
cell = row0.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 1500);
cell = row0.getCell(4);
setCellText(cell, " 身份证号", "FFFFFF", 1500);
cell = row0.getCell(5);
setCellText(cell, " 文本", "FFFFFF", 1500);


createTable(doc,"jiancejihua");

XWPFTable table2 = doc.createTable(2, 6);
XWPFTableRow row =null;
row.setHeight(380);
row = table2.getRow(0);
cell = row.getCell(0);
setCellText(cell, " 处室", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 1500);
cell = row.getCell(2);
setCellText(cell, " 科室", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 1500);
cell = row.getCell(4);
setCellText(cell, " 单位", "FFFFFF", 1500);
cell = row.getCell(5);
setCellText(cell, " 文本", "FFFFFF", 1500);
row = table2.getRow(1);
cell = row.getCell(0);
setCellText(cell, " 生产单元", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 1500);
cell = row.getCell(2);
setCellText(cell, " 接口人", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 1500);
cell = row.getCell(4);
setCellText(cell, " 状态", "FFFFFF", 1500);
cell = row.getCell(5);
setCellText(cell, " 文本", "FFFFFF", 1500);

createTable(doc,"异常描述");
XWPFTable table3 = doc.createTable(4, 4);
row = table3.getRow(0);
//row.setHeight(380);
cell = row.getCell(0);
setCellText(cell, " 类型", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, " 异常类型", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 3000);
row = table2.getRow(1);
cell = row.getCell(0);
setCellText(cell, " jz", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, " 时间", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 3000);
row = table2.getRow(2);
cell = row.getCell(0);
setCellText(cell, " 异常值", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, " 异常值单位", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 3000);
row = table2.getRow(3);
cell = row.getCell(0);
setCellText(cell, " 发起人", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, " 发起时间", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, " 文本", "FFFFFF", 3000);

createTable(doc,"调查(500个字符)");
XWPFTable table4 = doc.createTable(1, 2);
row = table4.getRow(0);
row.setHeight(900);
cell = row.getCell(0);
setCellText(cell, "调查描述", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 7500);
XWPFTable table5 = doc.createTable(1, 4);
row = table5.getRow(0);
row.setHeight(380);
cell = row.getCell(0);
setCellText(cell, "调查人", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, "日期", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, "文本", "FFFFFF", 3000);

createTable(doc,"调查2(500个字符)");
XWPFTable table6 = doc.createTable(1, 2);
row = table6.getRow(0);
row.setHeight(900);
cell = row.getCell(0);
setCellText(cell, "调查描述", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 7500);
XWPFTable table7 = doc.createTable(1, 6);
row = table7.getRow(0);
row.setHeight(380);
cell = row.getCell(0);
setCellText(cell, "确定方式", "FFFFFF", 2000);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 2000);
cell = row.getCell(2);
setCellText(cell, "最终值", "FFFFFF", 2000);
cell = row.getCell(3);
setCellText(cell, "文本", "FFFFFF", 2000);
cell = row.getCell(4);
setCellText(cell, "最终值单位", "FFFFFF", 2000);
cell = row.getCell(5);
setCellText(cell, "文本", "FFFFFF", 2000);
XWPFTable table8 = doc.createTable(1, 4);
row = table8.getRow(0);
cell = row.getCell(0);
setCellText(cell, "调查人", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, "日期", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, "文本", "FFFFFF", 3000);

createTable(doc,"结论与处理意见(200个字符)");
XWPFTable table9 = doc.createTable(2, 2);
row = table9.getRow(0);
cell = row.getCell(0);
setCellText(cell, "跟踪", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, "", "FFFFFF", 7500);
row = table9.getRow(1);
cell = row.getCell(0);
setCellText(cell, "结论", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, "", "FFFFFF", 7500);
XWPFTable table10 = doc.createTable(1, 4);
row = table10.getRow(0);
cell = row.getCell(0);
setCellText(cell, "审核人", "FFFFFF", 1500);
cell = row.getCell(1);
setCellText(cell, " 文本", "FFFFFF", 3000);
cell = row.getCell(2);
setCellText(cell, "日期", "FFFFFF", 1500);
cell = row.getCell(3);
setCellText(cell, "文本", "FFFFFF", 3000);

XWPFTable table11 = doc.createTable(1, 1);
setTableWidth(table11, "9000");
row = table11.getRow(0);
row.setHeight(380);
cell = row.getCell(0);
setCellText(cell, "备注", "FFFFFF", 9000);

try {
doc.write(outputStream); //outputStream= “e:/123.docx”
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}

 

 

 


//加个表格
/*XWPFTable tab = docx.createTable(2,3);
tab.setWidth(10000);
//增加一行
XWPFTableRow row1 = tab.createRow();
row1.setHeight(3500);
//增加列
XWPFTableCell cell1 =null;
cell1 = row1.createCell();
cell1.setText("姓名");
String hql="select t from TPdmisExceptionEntity t where t.userid='511021196307179130'";
List<TPdmisExceptionEntity> tPdmisExceptionEntityList = commonDao.findByQueryString(hql);
cell1 = row1.createCell();
cell1.setText(tPdmisExceptionEntityList.get(0).getUname());

cell1 = row1.createCell();
XWPFParagraph pIO =cell1.addParagraph();
XWPFRun rIO = pIO.createRun();
rIO.setFontFamily("宋体");
rIO.setFontSize(8);
rIO.setBold(true);
rIO.setText(tPdmisExceptionEntityList.get(0).getUname());

XWPFParagraph p1 = docx.createParagraph();
XWPFRun r1 = p1.createRun();
r1.setText("hello world");*/


/*try {
doc.write(outputStream);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}*/

/*//创建一个5行5列的表格
XWPFTable table = doc.createTable(5, 5);
//这里增加的列原本初始化创建的那5行在通过getTableCells()方法获取时获取不到,但通过row新增的就可以。
// table.addNewCol(); //给表格增加一列,变成6列
table.createRow(); //给表格新增一行,变成6行
List<XWPFTableRow> rows = table.getRows();
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//表格宽度
CTTblWidth width = tablePr.addNewTblW();
width.setW(BigInteger.valueOf(8000));
XWPFTableRow row;
List<XWPFTableCell> cells;
XWPFTableCell cell;
int rowSize = rows.size();
int cellSize;
for (int i = 0; i < rowSize; i++) {
row = rows.get(i);
//新增单元格
row.addNewTableCell();
//设置行的高度
row.setHeight(500);
//行属性
// CTTrPr rowPr = row.getCtRow().addNewTrPr();
//这种方式是可以获取到新增的cell的。
// List<CTTc> list = row.getCtRow().getTcList();
cells = row.getTableCells();
cellSize = cells.size();
for (int j = 0; j < cellSize; j++) {
cell = cells.get(j);
if ((i + j) % 2 == 0) {
//设置单元格的颜色
cell.setColor("ff0000"); //红色
} else {
cell.setColor("0000ff"); //蓝色
}
//单元格属性
CTTcPr cellPr = cell.getCTTc().addNewTcPr();
cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
if (j == 3) {
//设置宽度
cellPr.addNewTcW().setW(BigInteger.valueOf(3000));
}
cell.setText(i + ", " + j);
}
}*/

推荐阅读