如何使用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
相关产品推荐
相关产品推荐

