当前位置: 首页 > news >正文

使用Apache POI(Java)创建docx文档和表格

1、引入poi 依赖组件

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>

2、使用

1.引入库

import org.apache.poi.xwpf.usermodel.*;

2.初始化一个空文件,生成文档后写入文件中

public static File createFile() {
    Filefile = null;
    try {
        // 初始化模板文件
        String path = "./testFile.docx";
        Path path2 = Paths.get(path);
        boolean exists = Files.exists(path2);
        if (exists) {
            Files.delete(path2);
            file = new File(path);
        } else {
            file = new File(path);
        }
    } catch (IOException e) {
        log.error("初始化file失败", e.getMessage());
    }
    return file;
}

3.创建 XWPFDocument 对象,create段落

XWPFDocument document = new XWPFDocument();
// 创建文档中的段落
XWPFParagraph paragraph = document.createParagraph();
paragraph .setAlignment(ParagraphAlignment.CENTER); // 对齐方式
XWPFRun run = paragraph .createRun();
// 设置段落属性
run.setText("这是一段文字,代表一个段落内容!");
run.setBold(true);
run.setFontSize(18);
run.setFontFamily("微软雅黑");
run.addCarriageReturn();// 增加回车空行
run.setKerning(30);
段落循环创建

4.使用 XWPFDocument 对象创建表格

// 创建表格 n行*m列(创建table 时,会有一个默认一行一列的表格)
XWPFTable table = document.createTable(n, m);
table.setWidth("100%");// 表格所占文档宽度
// 获取第一行
XWPFTableRow row = table.getRow(0);// 设置表格标题行
// 标题行,每一列的名称都放入List中,可以循环设置列标题
List<String> titles = Lists.newArrayList();// 标题行集合
for (int i = 0; i < titles.size(); i++) {
	XWPFTableCell cell0 = row.getCell(i);
	cell0.setWidth(width + "%"); // 设置单元格宽度
	cell0.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); // 设置对齐方式

	// 单元格的标题假设为一个段落内容,就可以方便设置标题的样式,字体、大小、颜色等
	XWPFParagraph paragraph = cell0.addParagraph();
    paragraph.setAlignment(ParagraphAlignment.CENTER);// 设置对齐方式
    XWPFRun run = paragraph.createRun();
    run.setText("这是一个标题");
    run.setFontSize(16);// 大小
    run.setBold(true);// 是否加粗
    run.setFontFamily("方正仿宋");// 字体格式
}
* 或使用简单方式创建标题行,使用自适应样式
XWPFTableCell cell = rows.getCell(0);
buildAlignment(cell); // 单元格中的标题内容对齐方式
cell.setWidth("5%"); // 宽度
cell.setText("这也是一个标题");

/**
* 设置单元格样式
* @param cell cell
*/
private static void buildAlignment(XWPFTableCell cell) {
  CTTcPr cellPr = cell.getCTTc().getTcPr() == null ? cell.getCTTc().addNewTcPr() : cell.getCTTc().getTcPr();
  if (cellPr.getVAlign() == null) {
      cellPr.addNewVAlign().setVal(STVerticalJc.CENTER);
  } else {
      cellPr.getVAlign().setVal(STVerticalJc.CENTER);
  }
  XWPFParagraph paragraph1=cell.getParagraphArray(0);
  paragraph1.setAlignment(ParagraphAlignment.CENTER);
}

5.将创建的XWPFDocument对象 写入文件中

FileOutputStream fos= new FileOutputStream(file);
document.write(fos);
fos.close(); // 关闭流增加判断,不可直接关闭
// docx文件创建结束!

up

相关文章:

  • Baklib三步构建企业内容中台
  • 尚硅谷Java第 4、5 章IDEA,数组
  • 今日行情明日机会——20250411
  • 深入解析AI Agent核心能力:经验学习、工具调用与动态规划
  • 【含文档+PPT+源码】基于微信小程序的高校特色服装租赁系统
  • 第9课:多智能体系统行业落地案例
  • Java I/O 流体系详解与记忆方法
  • JAVA基础 - 高效管理线程隔离数据结构ThreadLocalMap
  • AI避坑:AI生成的文件格式不一定对
  • BERT - Bert模型框架复现
  • 4.11时钟延迟
  • linux sar 系统运行状态统计
  • HarmonyOS-ArkUIV2装饰器-@Param:组件外部输入
  • Spark-core编程总结
  • 接听电话,手机靠近耳朵后拿开,挂断电话,设备自动锁屏
  • 漏洞扫描系统docker版本更新(2025.4.10)
  • Trea CN多多与主流AI编程工具万字解析
  • [UEC++]UE5C++各类变量相关知识及其API(更新中)
  • C语言,原码、补码、反码
  • 操作系统 3.4-段页结合的实际内存管理
  • 台州找人做网站/2022新闻热点10条
  • 秦皇岛市 网站建设/淘宝seo是指什么
  • 网站cc攻击用什么来做/建站平台哪家好
  • 欢迎访问中国建设银行网站/软文街怎么样
  • 有什么做兼职的网站比较好/关键词搜索量全网查询
  • 女人与黑狗做视频网站/企业查询