Skip to content

Office操作工具类

一、Word 操作工具类

Word工具类相关

说明(包路径:com.kg.component.office)

  • 写入文本-工具类: WordWriteStringUtils.java
  • 写入表格-工具类: WordWriteTableUtils.java
  • 写入图片-工具类: WordWriteImageUtils.java
  • 写入HTML-工具类: WordWriteHtmlUtils.java
  • 文本常见格式(字号、字体等)-实体类: dto.WordStrFormatDTO.java
  • 表格常见格式(宽高、边框等)-实体类: dto.WordTableFormatDTO.java

2.1 导出原理

导出 word 原理:

  1. 先读取word模板
  2. 根据 ${tag} 标签替换为数据(HTML、文本字符串、表格、图片)
  3. 再写入新的word文件
  • 模板文件格式如下图:

导入Word方法

示例代码:

java
public static void main(String[] args) {
    String templatePath = ResourcePathUtils.path("templates/hello.docx");
    String outPath = FilePathConfig.SAVE_PATH + "/saveFolder/"+ TimeUtils.now().toFormat("yyyyMMdd") +".docx";
    // 1 读取模板文件内容
    XWPFDocument doc = new XWPFDocument(new FileInputStream(templatePath));
    // 2 写入内容,参数(文档, tag标签, 待写入数据, 是否追加)
    WordWriteStringUtils.writeStrByKey(doc, "data1", "标题1", false);
    // 3 生成新的word文件
    doc.write(new FileOutputStream(outPath));
    doc.close();
}

2.2 写文本

- 2.2.1 在指定位置写入文本

说明

  • 方法1:无格式写入,直接写入到指定位置,一般在模板中什么格式写入就是什么格式
  • 方法2:有格式写入,写入到指定位置,并设置格式

写入字符串

参数说明

  • doc: 要操作的文档
  • key: 写入位置标签(例如:word模板中${data1},则传入"data1")
  • content: 待写入内容
  • format: 文本常用格式设置(见:WordStrFormatDTO.java)
  • isAppend: 写入后是否保留原标签,用于再次写入(true保留,false不保留)
  • 格式使用WordStrFormatDTO传入,该类定义了常用的格式
java
/** Word 文本、段落 - 常用属性 */
@Getter
@Setter
public class WordStrFormatDTO {
    private Boolean bold;// 是否加粗
    private Boolean italic;// 是否斜体
    private Boolean underline;// 是否下划线
    private String fontFamily;// 字体(例如:仿宋  宋体  楷体  Microsoft YaHei)
    private Integer fontSize;// 字号,例如:10pt-五号 12pt-小四 14pt-四号 16pt-小三 18pt-三号 22pt-小二 24pt-二号 26pt-小一 36pt-一号
    private String color;// 颜色(RRGGBB,如:FF0000表示红色)
}

- 2.2.2 在新一行写入文本(先换行再写入)

说明

  • 方法1:无格式写入,写入到新行,一般在模板中什么格式写入就是什么格式
  • 方法2:有格式写入,写入到新行,并设置格式

写入字符串到新行

  • 参数说明和文本常见格式,同上:2.2.1

2.3 写表格

- 2.3.1 写入一个新表格(空表)

说明

  • 设置行数和列数,然后生成一个空表格,写入到文档
  • 后面的操作步骤,在该表格内写入

写入一个新表格

- 2.3.2 写入单行(例如:标题行)数据

说明

  • 方法1:无格式,写入标题行
  • 方法2:自定义格式,写入标题行

写入当行

参数说明

  • table: 要操作的表格
  • startRow: 写入数据的起始行
  • rowData: 待写入数据(例如:标题列表)
  • cover: 是否覆盖原内容(不覆盖,则在原内容后面追加)
  • format: 单元格内部文字格式,WordStrFormatDTO,见:2.2.1

- 2.3.3 写入多行(List<List<String>>)数据

说明

  • 方法1:无格式,写入数据行
  • 方法2:自定义格式,写入数据行

写入数据行

参数说明

  • table: 要操作的表格
  • startRow: 写入数据的起始行
  • rowList: 待写入数据列表(格式:List<List<String>>)
  • cover: 是否覆盖原内容(不覆盖,则在原内容后面追加)
  • format: 单元格内部文字格式,WordStrFormatDTO,见:2.2.1

- 2.3.4 合并单元格

java
{
    // 合并单元格(参数:待操作的表格、起始行、结束行、起始列、结束列)
    WordWriteTableUtils.tableMerge(table, 0, 1, 0, 0);// 合并第1列,1-2行
    WordWriteTableUtils.tableMerge(table, 2, 2, 0, 5);// 合并第3行,第1-6列
}

合并单元格

- 2.3.5 设置 表格/单元格 格式

说明

  1. 设置表格格式:设置表格的宽度、高度、边框、背景色等
  2. 设置单元格格式:设置单元格的宽度、高度、边框、背景色等

设置表格格式/单元格格式

参数说明

  • table: 要操作的表格
  • startRow: 起始行(设置单元格格式)
  • endRow: 结束行(设置单元格格式)
  • startCol: 起始列(设置单元格格式)
  • endCol: 结束列(设置单元格格式)
  • format: 表格或单元格格式,WordTableFormatDTO.java
java
/** Word 表格 - 常用属性 */
@Getter
@Setter
public class WordTableFormatDTO {
    public WordTableFormatDTO() { toDefault(); }

    private TableWidthType widthType;// 表格宽度类型(PCT-百分比)
    private String width;// 表格宽度
    private TableRowAlign align;// 表格对齐方式(该表格在行内的对齐方式,不是表格内容的对齐方式)
    private int rowHeight;// 行高
    private ParagraphAlignment cellAlign;// 单元格对齐方式
    private XWPFTableCell.XWPFVertAlign cellValign;// 单元格垂直对齐方式
    private int cellSpaceBefore;// 单元格段前空白
    private int cellSpaceAfter;// 单元格段后空白
    private String bgColor;// 单元格背景色

    /** 默认格式 */
    public void toDefault() {
        widthType = TableWidthType.PCT;// 宽度类型:百分比
        width = "100%";// 宽度:100%
        align = TableRowAlign.CENTER;// 对齐方式:居中
        rowHeight = 400;// 行高:400
        cellAlign = ParagraphAlignment.CENTER;// 单元格对齐方式:居中
        cellValign = XWPFTableCell.XWPFVertAlign.CENTER;// 单元格垂直对齐方式:居中
        cellSpaceBefore = 0;// 单元格段前空白:0
        cellSpaceAfter = 0;// 单元格段后空白:0
        bgColor = "FFFFFF";// 单元格背景色:白色
    }
}

2.4 写图片

注意

  • 支持的图片格式:jpg、jpeg、png、gif、tiff、bmp

- 2.4.1 表格内插入图片

说明

  • 方法1:在表格内的标签位置插入图片,自动调整宽高(默认原图宽高,超过A4尺寸的图按比例缩小,最大宽600px最大高930px)
  • 方法2:在表格内的标签位置插入图片,自定义宽高

插入图片

参数说明

  • doc: 要操作的文档
  • keyStr: 插入位置标签(例如:word模板中${data1},则传入"data1")
  • imgFile: 待插入图片
  • width: 图片宽度(单位:px)
  • height: 图片高度(单位:px)
  • isAppend: 写入后是否保留原标签,用于再次写入(true保留,false不保留)

- 2.4.2 非表格插入图片

说明

  • 方法1:在表格外的标签位置插入图片,自动调整宽高(默认原图宽高,超过A4尺寸的图按比例缩小,最大宽600px最大高930px)
  • 方法2:在表格外的标签位置插入图片,自定义宽高

写入图片

参数说明

  • 参数同上 2.4.1

2.5 写HTML

注意

  • 写入html时,会自动清除掉html标签,只保留文字内容
  • 若html内有图片,自动识别图片地址,支持3种类型图片,并自动调整宽高(默认原图宽高,超过A4尺寸的图按比例缩小,最大宽600px最大高930px)
  1. 网络图片:图片网址,如:https://www.example.com/image.jpg
  2. 本项目图片:以本项目api地址开头的图片地址,如:https://yanshi.java119.cn/dashuserver/upload/xxx/image.jpg
  3. 本地图片:服务器上的图片,绝对路径,如:/usr/local/image.jpg

说明

  • 方法1:写入无格式的html内容
  • 方法2:写入自定义格式的html内容

插入图片

参数说明

  • doc: 要操作的文档
  • key: 插入位置标签(例如:word模板中${data1},则传入"data1")
  • html: 待写入html内容
  • format: 文本常用格式设置(WordStrFormatDTO 见:2.2.1)
  • isAppend: 写入后是否保留原标签,用于再次写入(true保留,false不保留)