<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();
}
}
}发布于 2021-04-28 05:29:54
这甚至不可能使用Excel本身。
第一阶段sheet2.groupRow(0, 10);从第1行(行索引0)到第11行(行索引10)创建大纲级别1,在第12行标题中具有大纲级别处理程序。
第二阶段sheet2.groupRow(1, 2);和sheet2.groupRow(5, 6);在大纲级别2中创建两个组,在第4行和第8行的行标题中具有大纲级别处理程序。
然后,sheet2.groupRow(8, 10);尝试在大纲级别2中创建另一个组,从第9行(行索引8)到第11行(行索引10)。但是,大纲级别处理程序必须位于第12行的行标题中,但这是不可能的,因为已经存在大纲级别1的大纲级别处理程序。一行不能有两个不同的大纲级别处理程序。
分组sheet2.groupRow(8, 9);是可行的。
或者您必须使用sheet2.groupRow(0, 11);在大纲级别1中有第12行,因此该大纲级别的大纲级别处理程序将位于第13行。
如果在代码创建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();
}
}https://stackoverflow.com/questions/67293056
复制相似问题