点关注不迷路,欢迎再访!
精简博客内容,尽量已行业术语来分享。
努力做到对每一位认可自己的读者负责。
帮助别人的同时更是丰富自己的良机。
文章目录
-
- 前言
- 一.添加 Apache POI 依赖
- 二.填充文档内容
- 三.导出文档效果测试
前言
在 Java 应用程序中,有时候我们需要将数据导出为 Word 文档,以便进行文档的编辑、打印或共享。本文将介绍如何使用 Java 实现导出 Word 文档的方法,帮助你灵活处理文档导出需求。
一.添加 Apache POI 依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
二.填充文档内容
在导出 Word 文档之前,需要创建一个空的 Word 文档对象
//创建文档对象
XWPFDocument doc = new XWPFDocument();
//页边距
DocxUtil.setDocumentMargin(doc, "1082", "1440", "1082", "1440");
使用 Apache POI 提供的 API,可以向文档中添加段落标题
// 创建段落
XWPFParagraph p = doc.createParagraph();
DocxUtil.setTextFontInfo(p, false, false, text, "宋体", "000000", "24", false, null, false, false, null, 0, null);
DocxUtil.setParagraphSpacingInfo(p, true, "0", "0", "100", "100", true, "240", STLineSpacingRule.AUTO);
DocxUtil.setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER);
向文档中创建表格
XWPFParagraph paragraph = doc.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
XWPFTable table = paragraph.getDocument().createTable(3,3);//创建表格
table.setWidth(500);
table.setCellMargins(20, 20, 20, 20);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//表格宽度
CTTblWidth width = tablePr.addNewTblW();
width.setW(BigInteger.valueOf(4000));
//获取第一行
List<XWPFTableCell> tableCells = table.getRow(0).getTableCells();
tableCells.get(0).setText("单元格值");
三.导出文档效果测试
public class ExamTest {
public static void main(String[] args) throws IOException {
XWPFDocument doc = new XWPFDocument();
//页边距
DocxUtil.setDocumentMargin(doc, "1082", "1440", "1082", "1440");
addDocxParagraphTitle(doc,"标题");
addDocxParagraph(doc,"第一个段落内容");
FileOutputStream outputStream = new FileOutputStream("D://document.docx");
XWPFParagraph paragraph = doc.createParagraph();
paragraph.setAlignment(ParagraphAlignment.CENTER);
addDocxParagraph(doc,null);
addDocxParagraph(doc,"有边框的表格");
XWPFTable table = paragraph.getDocument().createTable(3,4);//创建表格
table.setWidth(500);
table.setCellMargins(20, 20, 20, 20);
//表格属性
CTTblPr tablePr = table.getCTTbl().addNewTblPr();
//表格宽度
CTTblWidth width = tablePr.addNewTblW();
width.setW(BigInteger.valueOf(8000));
//无边框
//CTTblBorders tableBorders = table.getCTTbl().getTblPr().addNewTblBorders();
//tableBorders.addNewBottom().setVal(STBorder.NIL);
//tableBorders.addNewLeft().setVal(STBorder.NIL);
//tableBorders.addNewRight().setVal(STBorder.NIL);
//tableBorders.addNewTop().setVal(STBorder.NIL);
//tableBorders.addNewInsideH().setVal(STBorder.NIL);
//tableBorders.addNewInsideV().setVal(STBorder.NIL);
for (int k = 0; k < 3; k++) {
List<XWPFTableCell> tableCells = table.getRow(k).getTableCells();
if(k == 0){
tableCells.get(0).setText("序号");
}else{
tableCells.get(0).setText(String.valueOf(k));
}
for (int j = 0; j < 3; j++) {
if(k == 0){
tableCells.get(j+1).setText(String.valueOf(j+1));
}else{
tableCells.get(j+1).setText("");
}
}
}
doc.write(outputStream);
outputStream.close();
}
private static void addDocxParagraphTitle(XWPFDocument doc, String title) {
// 标题
XWPFParagraph titleP = doc.createParagraph();
DocxUtil.setTextFontInfo(titleP, false, false, title, "宋体", "000000", "44", true, null, false,
false, null, 0, null);
DocxUtil.setParagraphSpacingInfo(titleP, true, "0", "0", "0", "50", true, "240", STLineSpacingRule.AUTO);
DocxUtil.setParagraphAlignInfo(titleP, ParagraphAlignment.CENTER, TextAlignment.CENTER);
}
private static void addDocxParagraph(XWPFDocument doc, String text) {
XWPFParagraph p = doc.createParagraph();
DocxUtil.setTextFontInfo(p, false, false, text, "宋体", "000000", "24", false, null, false, false, null, 0, null);
DocxUtil.setParagraphSpacingInfo(p, true, "0", "0", "100", "100", true, "240", STLineSpacingRule.AUTO);
DocxUtil.setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER);
}
}
测试效果