Java Excel合并单元格设置样式

在处理Excel文件时,经常会遇到合并单元格的需求。合并单元格可以使表格更加美观,并且可以在一个单元格中展示多个数据。本文将介绍如何使用Java语言实现Excel合并单元格以及为合并后的单元格设置样式。

1. 导入依赖

首先,在Java项目中使用Apache POI库来操作Excel文件。在pom.xml中添加以下依赖项:

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.0.0</version>
    </dependency>
</dependencies>

2. 创建Excel文件

在开始之前,我们需要先创建一个Excel文件。可以使用以下代码创建一个简单的Excel文件:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

    public static void createExcel(String filePath) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("Hello, Excel!");

        FileOutputStream fileOutputStream = new FileOutputStream(filePath);
        workbook.write(fileOutputStream);
        workbook.close();
        fileOutputStream.close();
    }

    public static void main(String[] args) throws Exception {
        createExcel("example.xlsx");
    }
}

运行以上代码,将在项目根目录下生成一个名为example.xlsx的Excel文件,其中单元格A1中的内容为"Hello, Excel!"。

3. 合并单元格

接下来,我们来演示如何合并单元格。合并单元格可以使用CellRangeAddress类来定义合并的区域。

以下是合并单元格的示例代码:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

    public static void mergeCells(String filePath) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        Row row1 = sheet.createRow(0);
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("Hello, Excel!");

        Row row2 = sheet.createRow(1);
        Cell cell2_1 = row2.createCell(0);
        cell2_1.setCellValue("Merged Cells");
        Cell cell2_2 = row2.createCell(1);
        cell2_2.setCellValue("Merged Cells");

        CellRangeAddress mergedRegion = new CellRangeAddress(1, 1, 0, 1);
        sheet.addMergedRegion(mergedRegion);

        FileOutputStream fileOutputStream = new FileOutputStream(filePath);
        workbook.write(fileOutputStream);
        workbook.close();
        fileOutputStream.close();
    }

    public static void main(String[] args) throws Exception {
        mergeCells("example.xlsx");
    }
}

运行以上代码,将会在Excel文件中合并单元格B2和C2,使其显示为一个单元格,并且单元格中的内容为"Merged Cells"。

4. 设置合并后单元格的样式

合并后的单元格可以设置样式,例如字体、背景颜色、边框等。下面的示例代码演示了如何设置合并后单元格的样式。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

    public static void mergeCellsWithStyle(String filePath) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");

        Row row1 = sheet.createRow(0);
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("Hello, Excel!");

        Row row2 = sheet.createRow(1);
        Cell cell2_1 = row2.createCell(0);
        cell2_1.setCellValue("Merged Cells");
        Cell cell2_2 = row2.createCell(1);
        cell2_2.setCellValue("Merged Cells");

        CellRangeAddress mergedRegion = new CellRangeAddress(1, 1, 0, 1);
        sheet.addMergedRegion(mergedRegion);

        // 创建样式
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        // 应用样式到合并后的单元格