广告

Java设置Excel单元格样式的详细教程:从字体、颜色到边框的完整实战

一、准备工作与依赖配置

1.1 引入 Apache POI 依赖

在 Java 中处理 Excel,最常用的库是 Apache POI。通过 Maven/Gradle 引入依赖,可以创建、修改 Excel 文件,并实现单元格样式的灵活定制。核心组件包括 poi、poi-ooxml、poi-ooxml-schemas 等,用于处理不同格式的 Excel 文件。

要点是确保项目中已经引入了 POI 的核心依赖,以及用于处理 .xlsx 的 poi-ooxml 模块,以便支持 XSSFWorkbook 等 API。

1.2 Maven/Gradle 依赖配置示例

以下示例展示了在常见构建工具中引入 POI 的基本方式,确保能够快速集成与后续扩展。依赖完整性决定了你能否顺利使用 XSSF/OOXML 相关类。


<dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.3.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency>
</dependencies>

二、创建 Excel 文件并应用样式的基础

2.1 打开工作簿与工作表

在 Java 中创建 Excel 文件的第一步是 创建 Workbook 对象,对于 .xlsx 使用 XSSFWorkbook,也可以用 Workbook 接口来实现跨格式兼容。工作表 Sheet 则对应一个页签,后续通过行 Row、单元格 Cell 进行数据写入。

通过示例可以看到,结构层次清晰:Workbook -> Sheet -> Row -> Cell,逐级构建后才可写入最终的文件。

2.2 定义和应用单元格样式的思路

单元格样式由 CellStyleFont 两部分组成。先创建 Font,再创建 CellStyle,并把 Font 设置到样式中,这样可以实现字体、颜色等统一风格的控制。

核心流程是:定义 Font -> 创建 CellStyle -> 应用样式到单元格,最后将单元格写出到输出流。


import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;public class BaseStyleExample {public static void main(String[] args) throws Exception {Workbook wb = new XSSFWorkbook();Sheet sheet = wb.createSheet("样式演示");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("示例单元格");// 字体Font font = wb.createFont();font.setFontName("微软雅黑");font.setFontHeightInPoints((short)12);font.setBold(true);font.setColor(IndexedColors.BLUE.getIndex());// 样式CellStyle style = wb.createCellStyle();style.setFont(font);
<        style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);cell.setCellStyle(style);try (FileOutputStream fos = new FileOutputStream("BaseStyleExample.xlsx")) {wb.write(fos);}wb.close();}
}

上述代码展示了一个基础的样式应用场景,其中 字体属性居中对齐等设定将直接影响单元格的显示效果。示例文件生成后可用于快速验证样式是否生效。

三、从字体到颜色:单元格字体与填充

3.1 设置字体

Font 对象控制 字号、字体、粗细、颜色等属性。常用字段包括 setFontName、setFontHeightInPoints、setBold、setColor 等。通过组合,可以实现诸如标题加粗、缓存区域统一风格等需求。

在实际应用中,先设定字体再绑定到单元格样式,确保颜色与风格能够正确传递到单元格层级。

3.2 设置填充颜色与背景

单元格背景颜色通过 setFillForegroundColorsetFillPattern 实现,常用组合是 FillPatternType.SOLID_FOREGROUND 与浅色背景,便于文本可读性提升。


style.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

通过上述设置,单元格的背景颜色能够在打印和屏幕显示上保持一致,且对比度更好。视觉效果的统一性对于报告型文档尤为关键。

四、边框与对齐:让单元格更清晰

4.1 设置边框样式

边框通过 setBorderTop/Bottom/Left/Right 设置,边框样式可选 THIN、DASHED、MEDIUM 等,边框颜色通过相应的 TopBorderColor/BottomBorderColor 设置。统一的边框可以提升表格的整洁度。

需要注意的是:在设置颜色之前先设置样式,并确保颜色索引合法,避免运行时异常。

Java设置Excel单元格样式的详细教程:从字体、颜色到边框的完整实战

4.2 文字对齐

水平对齐通过 setAlignment,垂直对齐通过 setVerticalAlignment 实现。常用组合包括 CENTER-CENTER、LEFT-CENTER 等,以确保标题行和数据行的文本排布整齐。

五、应用示例:从头到尾的完整代码

5.1 从头创建并保存一个带样式的 Excel 文件

下面给出一个完整示例,演示从创建工作簿、定义字体与样式到写出文件的全过程。全流程代码适合直接复制运行,能快速验证“从字体到边框”的完整样式效果。


import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;public class StyleDemo {public static void main(String[] args) throws Exception {Workbook wb = new XSSFWorkbook();Sheet sheet = wb.createSheet("样式演示");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("示例单元格");// 字体Font font = wb.createFont();font.setFontName("微软雅黑");font.setFontHeightInPoints((short)12);font.setBold(true);font.setColor(IndexedColors.BLUE.getIndex());// 样式CellStyle style = wb.createCellStyle();style.setFont(font);style.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);style.setAlignment(HorizontalAlignment.CENTER);style.setVerticalAlignment(VerticalAlignment.CENTER);// 边框style.setBorderTop(BorderStyle.THIN);style.setBorderBottom(BorderStyle.THIN);style.setBorderLeft(BorderStyle.THIN);style.setBorderRight(BorderStyle.THIN);style.setTopBorderColor(IndexedColors.BLACK.getIndex());style.setBottomBorderColor(IndexedColors.BLACK.getIndex());style.setLeftBorderColor(IndexedColors.BLACK.getIndex());style.setRightBorderColor(IndexedColors.BLACK.getIndex());cell.setCellStyle(style);sheet.autoSizeColumn(0);try (OutputStream fileOut = new FileOutputStream("StyleDemo.xlsx")) {wb.write(fileOut);}wb.close();}
}

该示例完整呈现了从字体、颜色到边框的完整实战流程,并最终生成带样式的 .xlsx 文件。样式复用思路也有助于提升大表格的渲染性能。

广告

后端开发标签