You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache POI在Java中实现Excel水平双窗格拆分?

使用Apache POI创建Excel水平双窗格

当然可以实现水平方向的双窗格拆分,问题出在createSplitPlane()方法的参数设置上——只要把垂直拆分的位置设为0,就能避免生成四窗格,只保留上下两个水平窗格。

核心参数说明

XSSFSheet.createSplitPlane()的参数定义如下:

void createSplitPlane(int xSplitPos, int ySplitPos, int topRow, int leftCol, int activePane)
  • xSplitPos:垂直拆分位置(单位:1/20磅),设为0即可关闭垂直拆分
  • ySplitPos:水平拆分位置(单位:1/20磅),设置为你想要拆分的行位置对应的总高度
  • topRow:上窗格默认显示的首行索引(0-based)
  • leftCol:左窗格默认显示的首列索引(0-based)
  • activePane:指定活动窗格,比如XSSFSheet.PANE_LOWER_RIGHT表示激活下侧窗格

代码示例

假设要在第3行(Excel界面显示的第3行,对应代码中0-based的索引2)下方拆分出上下两个窗格:

// 创建工作簿和工作表
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("水平拆分示例");

// 填充测试数据
for (int i = 0; i < 20; i++) {
    XSSFRow row = sheet.createRow(i);
    row.createCell(0).setCellValue("行" + (i+1));
}

// 计算前3行的总高度(单位转换为1/20磅)
int totalRowHeight = 0;
for (int i = 0; i < 3; i++) {
    totalRowHeight += sheet.getRow(i).getHeight();
}

// 创建水平双窗格:关闭垂直拆分,设置水平拆分位置,指定默认显示行/列及活动窗格
sheet.createSplitPlane(0, totalRowHeight, 0, 0, XSSFSheet.PANE_LOWER_RIGHT);

// 输出文件
try (FileOutputStream fos = new FileOutputStream("水平拆分示例.xlsx")) {
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

注意事项

  • 如果不需要精确计算行高,也可以直接传入固定值(比如1000)作为ySplitPos,Excel会自动调整拆分位置
  • 之前生成四窗格,大概率是因为xSplitPos未设为0,导致同时开启了垂直拆分

内容的提问来源于stack exchange,提问作者Yashik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:15:39