1 基本
1.1 创建一个文档
XWPFDocument doc = new XWPFDocument();
1.2 创建一个表格
XWPFTable table1 =document.createTable(31, 12);
1.3 创建一个行
XWPFTable table1 =document.createTable(31, 12);
1.4 创建一个单元格
CTTc cttc = row.getCTTc();
1.5 大体步骤
2 抽取公共类
2.1 跨行
/**
* @Description: 跨行合并
* 表格 列 行 行end
*/
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 ) {
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
} else{
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
}
}
}
2.2 跨列
/**
* @Description: 跨列合并
* 表格 行 单元格 单元格end
*/
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 ) {
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
} else {
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
}
}
}
2.3 设置表格总宽度
/**
* 设置表格总宽度
* @param table
* @param width
*/
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);
}
2.4 指定单元行
不能单独使用,结合下一个
public void cellUtil(XWPFTable table, Integer rowId,Integer cellId,
IntegerrowHight , String text ,String bgcolor , Integer cellHight ) {
XWPFTableRow row =table.getRow(rowId);
row.setHeight(rowHight);
setCellText(row.getCell(cellId),text, bgcolor, cellHight);
}
2.5 填充单元格数据
不能单独使用,结合上一个
/**
* 填充单元格数据
* @param cell
* @param text
* @param bgcolor
* @param width
*/
public void setCellText(XWPFTableCell cell,String text, Stringbgcolor, 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);
if (text!=null && !"".equals(text)&& !"null".equals(text)) {
cell.setText(text);
}
}
3 例子解题思路
3.1 图
3.2 思路
Dao得到的数据最好与表格想对应,才方便填充,一般是一行一行数据填充