Java使用apache.poi生成excel插入word中

加油,新时代打工人!

工作需求,上个文章我们生成好的word,这次将生成好的excel表格数据,插入word中。需要准备好excle数据,然后插入到word中。
最后个需要,就是把这些生成好的word文档转成pdf进行前端下载下来。
Java使用apache.poi生成word

在这里插入图片描述

package com.wh.filedownload.controller;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblBorders;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author wh
 * @date 2024年05月22日16:12
 * 将excel表格数据,导入现有的word模板中.
 */
public class word2 {
    public static void main(String[] args) throws IOException, InvalidFormatException {

        String excelFilePath = "sample.xlsx";
        String wordFilePath = "output.docx";
        String tempWordFilePath = "tempWordFile.docx";

        FileInputStream excelFileInputStream = new FileInputStream(new File(excelFilePath));
        Workbook workbook = WorkbookFactory.create(excelFileInputStream);
        Sheet sheet = workbook.getSheetAt(0); // 假设只处理第一个sheet

        FileInputStream wordFileInputStream = new FileInputStream(new File(wordFilePath));
        XWPFDocument document = new XWPFDocument(wordFileInputStream);
        int rowCount = sheet.getLastRowNum();
        int colCount = sheet.getRow(0).getLastCellNum(); // 假设第一行有最多的列
        // 创建Word中的表格
        XWPFTable table = document.createTable(rowCount + 1, colCount); // +1行是为了标题
        // 获取或创建表格的边框设置对象
        CTTblBorders tblBorders = table.getCTTbl().getTblPr().getTblBorders();

        // 设置表格边框样式
        tblBorders.getTop().setVal(STBorder.SINGLE); // 上边框
        tblBorders.getLeft().setVal(STBorder.SINGLE); // 左边框
        tblBorders.getRight().setVal(STBorder.SINGLE); // 右边框
        tblBorders.getBottom().setVal(STBorder.SINGLE); // 下边框

        // 填充表格标题
        Row headerRow = sheet.getRow(0);
        for (int i = 0; i < colCount; i++) {
            XWPFTableCell cell = table.getRow(0).getCell(i);
            cell.setText(headerRow.getCell(i).getStringCellValue());
        }

        // 填充表格数据
        for (int rowIndex = 1; rowIndex <= rowCount; rowIndex++) { // 从1开始,跳过标题行
            Row dataRow = sheet.getRow(rowIndex);
            if (dataRow == null) continue; // 跳过空行
            XWPFTableRow tableRow = table.getRow(rowIndex); // 对应的Word表格行

            for (int colIndex = 0; colIndex < colCount; colIndex++) {
                Cell cell = dataRow.getCell(colIndex);
                if (cell == null) continue; // 如果单元格为空,则跳过

                switch (cell.getCellType()) {
                    case STRING:
                        tableRow.getCell(colIndex).setText(cell.getStringCellValue());
                        break;
                    case NUMERIC:
                        if (DateUtil.isCellDateFormatted(cell)) {
                            tableRow.getCell(colIndex).setText(cell.getLocalDateTimeCellValue().toString());
                        } else {
                            tableRow.getCell(colIndex).setText(String.valueOf(cell.getNumericCellValue()));
                        }
                        break;
                    // 可以继续添加对其他类型的处理
                }
            }
        }

        wordFileInputStream.close();
        FileOutputStream out = new FileOutputStream(tempWordFilePath);
        document.write(out);
        out.close();
        document.close();
        workbook.close();
        excelFileInputStream.close();

        // 这里可以选择将tempWordFilePath移动或重命名为wordFilePath以覆盖原文件
        // 注意:这一步骤会永久改变原Word文档
             File srcFile = new File(tempWordFilePath);
             File destFile = new File(wordFilePath);
             srcFile.renameTo(destFile);

        System.out.println("Excel content has been appended to the Word document.");
    }

}

运行结果。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值