杰瑞科技汇

Java POI如何合并Excel单元格?

使用Java POI合并Excel单元格

Apache POI是Java操作Microsoft Office格式文件(如Excel)的常用库,以下是使用POI合并Excel单元格的详细方法:

Java POI如何合并Excel单元格?-图1
(图片来源网络,侵删)

基本步骤

  1. 创建Workbook对象(如XSSFWorkbook用于.xlsx格式)
  2. 获取或创建Sheet对象
  3. 创建CellRangeAddress对象指定要合并的单元格范围
  4. 使用Sheet.addMergedRegion()方法合并单元格

示例代码

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class MergeCellsExample {
    public static void main(String[] args) {
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建工作表
        Sheet sheet = workbook.createSheet("合并单元格示例");
        // 创建行和单元格
        Row row = sheet.createRow(0);
        Cell cell = row.createCell(0);
        cell.setCellValue("合并后的单元格");
        // 定义要合并的单元格范围(从第0行到第2行,第0列到第2列)
        CellRangeAddress range = new CellRangeAddress(0, 2, 0, 2);
        // 合并单元格
        sheet.addMergedRegion(range);
        // 可选:设置合并后单元格的样式
        CellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        cell.setCellStyle(style);
        // 写入文件
        try (FileOutputStream outputStream = new FileOutputStream("merged_cells.xlsx")) {
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 关闭工作簿
        try {
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

更复杂的示例(合并多个区域)

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class MultipleMergeExample {
    public static void main(String[] args) {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("多区域合并");
        // 第一个合并区域
        Row row1 = sheet.createRow(0);
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("标题1");
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
        // 第二个合并区域
        Row row2 = sheet.createRow(1);
        Cell cell2 = row2.createCell(0);
        cell2.setCellValue("标题2");
        sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 0));
        // 第三个合并区域
        Row row3 = sheet.createRow(3);
        Cell cell3 = row3.createCell(1);
        cell3.setCellValue("跨列合并");
        sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 3));
        // 写入文件
        try (FileOutputStream outputStream = new FileOutputStream("multiple_merged.xlsx")) {
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  1. 合并区域内的数据:只有左上角的单元格会保留数据,其他单元格的数据会被忽略
  2. 样式设置:合并后单元格的样式由左上角单元格决定
  3. 性能考虑:合并大量单元格可能会影响性能
  4. 文件格式
    • .xlsx格式使用XSSFWorkbook
    • .xls格式使用HSSFWorkbook
  5. 取消合并:可以使用sheet.removeMergedRegion(index)方法取消合并

取消合并单元格的示例

// 获取合并区域数量
int mergedRegions = sheet.getNumMergedRegions();
// 取消第一个合并区域
if (mergedRegions > 0) {
    sheet.removeMergedRegion(0);
}

希望这些信息能帮助你使用Java POI合并Excel单元格!

Java POI如何合并Excel单元格?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇