最近在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; } }
结果为:
全文完。
相关推荐
Java使用Apache POI库导出Word文档是一种常见的技术实践,特别是在企业级应用中,用于生成报告、合同或者自定义的数据输出。Apache POI是Apache软件基金会的一个开源项目,它提供了处理Microsoft Office格式(如Word...
在本主题中,我们将深入探讨如何使用POI库来导出Word文档,并进行页眉、页脚和标题的设置。这个过程涉及到对Word文档的高级布局控制,对于自动化报告生成或批量创建文档非常有用。 1. **Apache POI简介** Apache ...
在本教程中,我们将重点讨论如何利用Apache POI 3.13版本来导出Word文档,并结合图片操作。 首先,Apache POI提供了一个叫做HWPF(Horrible Word Processor Format)的API来处理老版的Word(.doc)文件,而XWPF...
POI报表Word导出
在这个例子中,我们将探讨如何使用POI库来处理Word文档,特别是利用模板文件循环输出表格行并导出新的Word文档。这个过程在数据分析、报告生成或自动化文档制作等场景中非常有用。 首先,我们需要理解Word文档的...
在"java poi导出word"这个场景中,我们主要关注的是如何使用Java POI来创建和编辑Word文档。下面将详细介绍如何利用Java POI实现这些功能,并提供一些关键知识点。 1. 文字与段落: 在Java POI中,我们可以使用...
《使用Apache POI库导出Word文档》 在Java编程中,处理Microsoft Office文档时,Apache POI是一个不可或缺的库。POI项目提供了一系列API,允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel、Word...
本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...
在这个例子中,我们将聚焦于使用POI库在Java中导出包含图片的Word文档。这个过程涉及到几个关键步骤,包括创建Word文档对象、添加文本内容、以及插入图片。 首先,你需要在项目中引入Apache POI的依赖。通常,这...
### POI导出Word的几种方法 在Java开发过程中,特别是在使用Grails框架时,我们经常需要处理文档的生成和转换任务。其中一种常见的需求就是将数据导出为Word文档。Apache POI库提供了一种非常高效且灵活的方式来...
- Java源代码:包含使用Apache POI导出Word和Excel的示例或完整项目。 - 测试类:可能有单元测试或集成测试,验证导出功能的正确性。 - README文件:解释如何运行项目,以及可能的注意事项。 **最佳实践** - 使用...
### POI将数据导出至Word的实例解析 #### 一、概述 Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Word(.doc 和 .docx)、Excel(.xls 和 .xlsx)等。在本文中,我们将深入探讨...
此外,由于这个"poi导出word文档jar包"的描述比较简单,可能包含了其他相关的jar包或工具,比如可能包含了处理图片、模板或者样式文件的工具。在具体应用时,你需要根据实际情况检查和使用这些资源,以确保完整地...
实现了POI根据模板导出word,实现文字、表格、图表的替换生成。支持生成多种结构的表格、图表,关键代码都添加了注释,简单易懂。 其中表格和图表都写了两种实现方式,既可以只传简单的参数生成多个同结构的表格和...
Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在这个场景中,我们关注的是使用POI来生成Word文档。POI库提供了丰富的API,使得开发者能够轻松地创建、修改和...
POI框架导出Tree结构数据(连接线) 一、问题描述及现象需求说明 在效果评估系统中,存在指标管理和模板管理两个模块。模板管理中有一个导出模板功能,可以将模板导出到Excel表格中。模板下可以嵌套的是指标或模板...
POI导出Excel参考方法 POI(Poor Obfuscation Implementation)是一个Java的API,用于操作Microsoft Office文档,包括Excel、Word、PowerPoint等。下面是POI导出Excel参考方法的相关知识点: 1. POI的基本概念 ...
在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,如Word、Excel和PowerPoint。在这个特定的场景中,我们需要使用POI来实现在PPT中生成多条数据的雷达图(也...
标题中的“poi读取word 2007简单文本框值”指的是使用Apache POI库来读取Microsoft Word 2007文档中简单文本框内的文本内容。Apache POI是一个流行的开源Java库,用于处理Microsoft Office格式的文件,如Word(.docx...
3. **导出Word**: 在Word文档处理中,Apache POI使用HWPF来创建Document对象。可以插入Paragraphs、Runs来添加文本,使用Field对象插入字段,例如页码。此外,HWPF也支持插入图片,如JPEG或EMF格式,以及创建和...