加油,新时代打工人!
工作需求,上个文章我们生成好的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.");
    }
}
运行结果。
 



















