POI多级组与初级组行重叠无效
The row overlap between multi-level and primary groups of POI is not effective
- maven 版本
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
- 代码演示
private static void collapseRow() throws IOException {
try (SXSSFWorkbook wb2 = new SXSSFWorkbook(100)) {
SXSSFSheet sheet2 = wb2.createSheet("new sheet");
int rowCount = 20;
for (int i = 0; i < rowCount; i++) {
sheet2.createRow(i);
}
//The first stage
sheet2.groupRow(0, 10);
//second stage
sheet2.groupRow(1, 2);
//second stage
sheet2.groupRow(5, 6);
//second stage
sheet2.groupRow(8, 10);
try (FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx")) {
wb2.write(fileOut);
} finally {
wb2.dispose();
}
}
}
- sheet2.groupRow(8, 10);为什么没有生效
sheet2.groupRow(8, 10); Why didn't it take effect
这甚至不可能使用 Excel
本身。
第一阶段 sheet2.groupRow(0, 10);
从第 1 行(行索引 0)到第 11 行(行索引 10)创建大纲级别 1,在第 12 行的 header 行中具有大纲级别处理程序。
第二阶段 sheet2.groupRow(1, 2);
和 sheet2.groupRow(5, 6);
在大纲级别 2 中创建两个组,在第 4 行和第 8 行的第 header 行中具有大纲级别处理程序。
然后 sheet2.groupRow(8, 10);
尝试在大纲级别 2 从第 9 行(行索引 8)到第 11 行(行索引 10)创建另一个组。但是大纲级别处理程序必须在第 12 行的 header 行中。但这是不可能的,因为已经存在大纲级别 1 的大纲级别处理程序。一行不能有两个不同的大纲级别处理程序。
分组 sheet2.groupRow(8, 9);
可行。
或者您必须使用 sheet2.groupRow(0, 11);
在大纲级别 1 中设置第 12 行,因此该大纲级别的大纲级别处理程序将在第 13 行中。
如果您在代码创建 outlining_collapsed.xlsx
后尝试对 Excel
中的第 9 行到第 11 行进行分组,这将为这些行创建一个新的大纲级别。这看起来像这样:
我怀疑这是你想要的。 apache poi
不会使用它的高级 类 创建它。它可以使用底层低级别 类 而不是使用 SXSSF
来实现,因为它无法访问底层低级别 类.
使用 XSSF
的示例:
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
class CreateExcelGroupRowsTest {
private static void collapseRow() throws Exception {
try (XSSFWorkbook wb2 = new XSSFWorkbook()) {
XSSFSheet sheet2 = wb2.createSheet("new sheet");
int rowCount = 20;
for (int i = 0; i < rowCount; i++) {
sheet2.createRow(i);
}
//The first stage
sheet2.groupRow(0, 10);
//second stage
sheet2.groupRow(1, 2);
//second stage
sheet2.groupRow(5, 6);
//second stage
sheet2.groupRow(8, 10);
//set new outline level for rows 9 to 11
for (int r = 8; r <= 10; r++) {
sheet2.getRow(r).getCTRow().setOutlineLevel((short)3);
}
try (FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx")) {
wb2.write(fileOut);
} finally {
//wb2.dispose();
}
}
}
public static void main(String[] args) throws Exception {
collapseRow();
}
}
- maven 版本
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
- 代码演示
private static void collapseRow() throws IOException {
try (SXSSFWorkbook wb2 = new SXSSFWorkbook(100)) {
SXSSFSheet sheet2 = wb2.createSheet("new sheet");
int rowCount = 20;
for (int i = 0; i < rowCount; i++) {
sheet2.createRow(i);
}
//The first stage
sheet2.groupRow(0, 10);
//second stage
sheet2.groupRow(1, 2);
//second stage
sheet2.groupRow(5, 6);
//second stage
sheet2.groupRow(8, 10);
try (FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx")) {
wb2.write(fileOut);
} finally {
wb2.dispose();
}
}
}
- sheet2.groupRow(8, 10);为什么没有生效 sheet2.groupRow(8, 10); Why didn't it take effect
这甚至不可能使用 Excel
本身。
第一阶段 sheet2.groupRow(0, 10);
从第 1 行(行索引 0)到第 11 行(行索引 10)创建大纲级别 1,在第 12 行的 header 行中具有大纲级别处理程序。
第二阶段 sheet2.groupRow(1, 2);
和 sheet2.groupRow(5, 6);
在大纲级别 2 中创建两个组,在第 4 行和第 8 行的第 header 行中具有大纲级别处理程序。
然后 sheet2.groupRow(8, 10);
尝试在大纲级别 2 从第 9 行(行索引 8)到第 11 行(行索引 10)创建另一个组。但是大纲级别处理程序必须在第 12 行的 header 行中。但这是不可能的,因为已经存在大纲级别 1 的大纲级别处理程序。一行不能有两个不同的大纲级别处理程序。
分组 sheet2.groupRow(8, 9);
可行。
或者您必须使用 sheet2.groupRow(0, 11);
在大纲级别 1 中设置第 12 行,因此该大纲级别的大纲级别处理程序将在第 13 行中。
如果您在代码创建 outlining_collapsed.xlsx
后尝试对 Excel
中的第 9 行到第 11 行进行分组,这将为这些行创建一个新的大纲级别。这看起来像这样:
我怀疑这是你想要的。 apache poi
不会使用它的高级 类 创建它。它可以使用底层低级别 类 而不是使用 SXSSF
来实现,因为它无法访问底层低级别 类.
使用 XSSF
的示例:
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
class CreateExcelGroupRowsTest {
private static void collapseRow() throws Exception {
try (XSSFWorkbook wb2 = new XSSFWorkbook()) {
XSSFSheet sheet2 = wb2.createSheet("new sheet");
int rowCount = 20;
for (int i = 0; i < rowCount; i++) {
sheet2.createRow(i);
}
//The first stage
sheet2.groupRow(0, 10);
//second stage
sheet2.groupRow(1, 2);
//second stage
sheet2.groupRow(5, 6);
//second stage
sheet2.groupRow(8, 10);
//set new outline level for rows 9 to 11
for (int r = 8; r <= 10; r++) {
sheet2.getRow(r).getCTRow().setOutlineLevel((short)3);
}
try (FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx")) {
wb2.write(fileOut);
} finally {
//wb2.dispose();
}
}
}
public static void main(String[] args) throws Exception {
collapseRow();
}
}