??????? 最近在Git上看到一个导出表信息到word的项目(名字叫DBDocTool),下载后运行出错,看了下是用poi-3.10导出的,懒得修改别人的代码,自己随手写了个,代码如下:
??????
import java.io.FileOutputStream; import java.math.BigInteger; import org.apache.poi.xwpf.usermodel.Borders; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TextAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing; 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.STLineSpacingRule; 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_创建简单Word2007_S2_Test { public static void main(String[] args) throws Exception { POI_创建简单Word2007_S2_Test t = new POI_创建简单Word2007_S2_Test(); t.createSimpleTable("f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); } public void createSimpleTable(String savePath) throws Exception { XWPFDocument xdoc = new XWPFDocument(); XWPFParagraph xp = xdoc.createParagraph(); XWPFRun r1 = xp.createRun(); r1.setText("测试一个简单的表格"); r1.setFontFamily("宋体"); r1.setFontSize(12); r1.setTextPosition(10); r1.setBold(true); xp.setAlignment(ParagraphAlignment.CENTER); XWPFTable xTable = xdoc.createTable(5, 7); 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 i = 0; xTable.getRow(i).setHeight(380); setCellText(xdoc, xTable.getRow(i).getCell(0), "列名", "CCCCCC", getCellWidth(0)); setCellText(xdoc, xTable.getRow(i).getCell(1), "注释", "CCCCCC", getCellWidth(1)); setCellText(xdoc, xTable.getRow(i).getCell(2), "类型", "CCCCCC", getCellWidth(2)); setCellText(xdoc, xTable.getRow(i).getCell(3), "默认值", "CCCCCC", getCellWidth(3)); setCellText(xdoc, xTable.getRow(i).getCell(4), "标识", "CCCCCC", getCellWidth(4)); setCellText(xdoc, xTable.getRow(i).getCell(5), "主键", "CCCCCC", getCellWidth(5)); setCellText(xdoc, xTable.getRow(i).getCell(6), "空值", "CCCCCC", getCellWidth(6)); i++; for (int i2 = i; i2 < 5; i2++) { for (int j = 0; j < 7; j++) { setCellText(xdoc, xTable.getRow(i2).getCell(j), "测试", null, getCellWidth(i)); } } XWPFTableRow row = xTable.insertNewTableRow(0); row.setHeight(380); XWPFTableCell cell = row.addNewTableCell(); 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(0))); cell.setColor("CCCCCC"); cell.setText("中文名称"); cell = row.addNewTableCell(); cttc = cell.getCTTc(); cellPr = cttc.addNewTcPr(); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cellPr.addNewTcW().setW(BigInteger.valueOf(getCellWidth(1))); cell.setText("测试测试"); cell = row.addNewTableCell(); cttc = cell.getCTTc(); cellPr = cttc.addNewTcPr(); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cellPr.addNewTcW().setW(BigInteger.valueOf(getCellWidth(2))); cell.setColor("CCCCCC"); cell.setText("英文名称"); cell = row.addNewTableCell(); cttc = cell.getCTTc(); cellPr = cttc.addNewTcPr(); cellPr.addNewGridSpan().setVal(BigInteger.valueOf(4)); cellPr.addNewHMerge().setVal(STMerge.CONTINUE); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue("测试水平垂直居中"); row = xTable.insertNewTableRow(1); row.setHeight(380); cell = row.addNewTableCell(); cttc = cell.getCTTc(); cellPr = cttc.addNewTcPr(); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cellPr.addNewTcW().setW(BigInteger.valueOf(getCellWidth(0))); cell.setColor("CCCCCC"); cell.setText("功能描述"); cell = row.addNewTableCell(); cttc = cell.getCTTc(); cellPr = cttc.addNewTcPr(); cellPr.addNewGridSpan().setVal(BigInteger.valueOf(6)); cellPr.addNewHMerge().setVal(STMerge.CONTINUE); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue("测试功能描述"); XWPFParagraph p1 = xdoc.createParagraph(); p1.setAlignment(ParagraphAlignment.CENTER); p1.setVerticalAlignment(TextAlignment.CENTER); r1 = p1.createRun(); r1.setBold(true); r1.setText("默认单倍行距"); r1.setFontSize(13); p1 = xdoc.createParagraph(); p1.setAlignment(ParagraphAlignment.CENTER); p1.setVerticalAlignment(TextAlignment.CENTER); CTPPr pr = p1.getCTP().getPPr() != null ? p1.getCTP().getPPr() : p1.getCTP().addNewPPr(); CTSpacing spacing =pr.addNewSpacing(); spacing.setLine(new BigInteger("360")); spacing.setLineRule(STLineSpacingRule.AUTO); r1 = p1.createRun(); r1.setBold(true); r1.setText("测试1.5倍行距"); r1.setFontSize(13); p1 = xdoc.createParagraph(); p1.setAlignment(ParagraphAlignment.CENTER); p1.setBorderBottom(Borders.DOUBLE); p1.setBorderTop(Borders.DOUBLE); p1.setBorderRight(Borders.DOUBLE); p1.setBorderLeft(Borders.DOUBLE); p1.setBorderBetween(Borders.SINGLE); p1.setSpacingBeforeLines(100); p1.setAlignment(ParagraphAlignment.CENTER); p1.setVerticalAlignment(TextAlignment.CENTER); r1 = p1.createRun(); r1.setBold(true); r1.setText("学而时习之"); r1.setFontSize(13); CTRPr rpr= r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("黑体"); fonts.setEastAsia("黑体"); fonts.setHAnsi("黑体"); FileOutputStream fos = new FileOutputStream(savePath); xdoc.write(fos); fos.close(); } 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(XWPFVertAlign.CENTER); CTTcPr ctPr = cttc.addNewTcPr(); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } private static int getCellWidth(int index) { int cwidth = 1000; if (index == 0) { cwidth = 1600; } else if (index == 1) { cwidth = 3000; } else if (index == 2) { cwidth = 1200; } else if (index == 3) { cwidth = 900; } else if (index == 4) { cwidth = 600; } else if (index == 5) { cwidth = 600; } else if (index == 6) { cwidth = 700; } return cwidth; } }
?
???? 结果为:
????
?
???? 全文完。
原文:http://53873039oycg.iteye.com/blog/2149449