import java.io.FileOutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.apache.poi.xwpf.usermodel.BreakType; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_表格边框相关_S2_Test { public static void main(String[] args) throws Exception { POI_表格边框相关_S2_Test t=new POI_表格边框相关_S2_Test(); XWPFDocument document = new XWPFDocument(); t.createSimpleTableWithBdColor(document); t.addNewPage(document, BreakType.TEXT_WRAPPING); t.createSimpleTableNormal(document); t.addNewPage(document, BreakType.TEXT_WRAPPING); t.createSimpleTableWithNotBd(document); t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); } //表格自定义边框 请忽略这么丑的颜色样式,主要说明可以自定义样式 public void createSimpleTableWithBdColor(XWPFDocument doc) throws Exception { List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); XWPFTable table = doc.createTable(2,5); CTTblBorders borders=table.getCTTbl().getTblPr().addNewTblBorders(); CTBorder hBorder=borders.addNewInsideH(); hBorder.setVal(STBorder.Enum.forString("dashed")); hBorder.setSz(new BigInteger("1")); hBorder.setColor("0000FF"); CTBorder vBorder=borders.addNewInsideV(); vBorder.setVal(STBorder.Enum.forString("dotted")); vBorder.setSz(new BigInteger("1")); vBorder.setColor("00FF00"); CTBorder lBorder=borders.addNewLeft(); lBorder.setVal(STBorder.Enum.forString("double")); lBorder.setSz(new BigInteger("1")); lBorder.setColor("3399FF"); CTBorder rBorder=borders.addNewRight(); rBorder.setVal(STBorder.Enum.forString("single")); rBorder.setSz(new BigInteger("1")); rBorder.setColor("F2B11F"); CTBorder tBorder=borders.addNewTop(); tBorder.setVal(STBorder.Enum.forString("thick")); tBorder.setSz(new BigInteger("1")); tBorder.setColor("C3599D"); CTBorder bBorder=borders.addNewBottom(); bBorder.setVal(STBorder.Enum.forString("wave")); bBorder.setSz(new BigInteger("1")); bBorder.setColor("BF6BCC"); 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("8000")); tblWidth.setType(STTblWidth.DXA); XWPFTableRow firstRow=null; XWPFTableRow secondRow=null; XWPFTableCell firstCell=null; XWPFTableCell secondCell=null; for(int i=0;i<2;i++){ firstRow=table.getRow(i); firstRow.setHeight(380); for(int j=0;j<5;j++){ firstCell=firstRow.getCell(j); setCellText(firstCell, "测试", "FFFFC9", 1600); } } firstRow=table.insertNewTableRow(0); secondRow=table.insertNewTableRow(1); firstRow.setHeight(380); secondRow.setHeight(380); for(String str:columnList){ if(str.indexOf("|") == -1){ firstCell=firstRow.addNewTableCell(); secondCell=secondRow.addNewTableCell(); createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART); createVSpanCell(secondCell, "", "CCCCCC", 1600,null); }else{ String[] strArr=str.split("\\|"); firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART); for(int i=1;i<strArr.length-1;i++){ firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, "","CCCCCC",1600,null); } for(int i=1;i<strArr.length;i++){ secondCell=secondRow.addNewTableCell(); setCellText(secondCell, strArr[i], "CCCCCC", 1600); } } } } //表格正常边框 public void createSimpleTableNormal(XWPFDocument doc) throws Exception { List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); XWPFTable table = doc.createTable(2,5); 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("8000")); tblWidth.setType(STTblWidth.DXA); XWPFTableRow firstRow=null; XWPFTableRow secondRow=null; XWPFTableCell firstCell=null; XWPFTableCell secondCell=null; for(int i=0;i<2;i++){ firstRow=table.getRow(i); firstRow.setHeight(380); for(int j=0;j<5;j++){ firstCell=firstRow.getCell(j); setCellText(firstCell, "测试", "FFFFC9", 1600); } } firstRow=table.insertNewTableRow(0); secondRow=table.insertNewTableRow(1); firstRow.setHeight(380); secondRow.setHeight(380); for(String str:columnList){ if(str.indexOf("|") == -1){ firstCell=firstRow.addNewTableCell(); secondCell=secondRow.addNewTableCell(); createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART); createVSpanCell(secondCell, "", "CCCCCC", 1600,null); }else{ String[] strArr=str.split("\\|"); firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART); for(int i=1;i<strArr.length-1;i++){ firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, "","CCCCCC",1600,null); } for(int i=1;i<strArr.length;i++){ secondCell=secondRow.addNewTableCell(); setCellText(secondCell, strArr[i], "CCCCCC", 1600); } } } } //表格无边框 public void createSimpleTableWithNotBd(XWPFDocument doc) throws Exception { List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); XWPFTable table = doc.createTable(2,5); CTTblBorders borders=table.getCTTbl().getTblPr().addNewTblBorders(); CTBorder hBorder=borders.addNewInsideH(); hBorder.setVal(STBorder.Enum.forString("none")); hBorder.setSz(new BigInteger("1")); hBorder.setColor("0000FF"); CTBorder vBorder=borders.addNewInsideV(); vBorder.setVal(STBorder.Enum.forString("none")); vBorder.setSz(new BigInteger("1")); vBorder.setColor("00FF00"); CTBorder lBorder=borders.addNewLeft(); lBorder.setVal(STBorder.Enum.forString("none")); lBorder.setSz(new BigInteger("1")); lBorder.setColor("3399FF"); CTBorder rBorder=borders.addNewRight(); rBorder.setVal(STBorder.Enum.forString("none")); rBorder.setSz(new BigInteger("1")); rBorder.setColor("F2B11F"); CTBorder tBorder=borders.addNewTop(); tBorder.setVal(STBorder.Enum.forString("none")); tBorder.setSz(new BigInteger("1")); tBorder.setColor("C3599D"); CTBorder bBorder=borders.addNewBottom(); bBorder.setVal(STBorder.Enum.forString("none")); bBorder.setSz(new BigInteger("1")); bBorder.setColor("F7E415"); 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("8000")); tblWidth.setType(STTblWidth.DXA); XWPFTableRow firstRow=null; XWPFTableRow secondRow=null; XWPFTableCell firstCell=null; XWPFTableCell secondCell=null; for(int i=0;i<2;i++){ firstRow=table.getRow(i); firstRow.setHeight(380); for(int j=0;j<5;j++){ firstCell=firstRow.getCell(j); setCellText(firstCell, "测试", "FFFFC9", 1600); } } firstRow=table.insertNewTableRow(0); secondRow=table.insertNewTableRow(1); firstRow.setHeight(380); secondRow.setHeight(380); for(String str:columnList){ if(str.indexOf("|") == -1){ firstCell=firstRow.addNewTableCell(); secondCell=secondRow.addNewTableCell(); createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART); createVSpanCell(secondCell, "", "CCCCCC", 1600,null); }else{ String[] strArr=str.split("\\|"); firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART); for(int i=1;i<strArr.length-1;i++){ firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, "","CCCCCC",1600,null); } for(int i=1;i<strArr.length;i++){ secondCell=secondRow.addNewTableCell(); setCellText(secondCell, strArr[i], "CCCCCC", 1600); } } } } 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); } public void createHSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){ CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cellPr.addNewHMerge().setVal(stMerge); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue(value); } public void createVSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){ CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cellPr.addNewVMerge().setVal(stMerge); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue(value); } public void addNewPage(XWPFDocument document,BreakType breakType){ XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakType); } public void saveDocument(XWPFDocument document,String savePath) throws Exception{ FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); }
import java.io.FileOutputStream; import java.math.BigInteger; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_表格合并_S3_Test { public static void main(String[] args) throws Exception { POI_表格合并_S3_Test t=new POI_表格合并_S3_Test(); XWPFDocument document = new XWPFDocument(); t.megerTableCell(document); t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); } public void megerTableCell(XWPFDocument document) { XWPFTable table1 = document.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); } 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 saveDocument(XWPFDocument document, String savePath) throws Exception { FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } }
}