`
53873039oycg
  • 浏览: 824305 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]poi导出简单word2007

    博客分类:
  • poi
 
阅读更多

        最近在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;
	}
}

 

     结果为

    

 

     全文完

  • 大小: 57.8 KB
1
0
分享到:
评论
1 楼 ITCCYC 2017-10-26  
导出的word用不兼容WPS怎么解决?

相关推荐

Global site tag (gtag.js) - Google Analytics