首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POI的多层组和主组之间的行重叠无效。

POI的多层组和主组之间的行重叠无效。
EN

Stack Overflow用户
提问于 2021-04-28 02:43:37
回答 1查看 279关注 0票数 0
  1. maven版本
代码语言:javascript
复制
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
  1. 代码演示
代码语言:javascript
复制
    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();
            }
        }
    }
  1. 板块2.群行(8,10);为什么它不起作用2.群行(8,10);为什么它不起作用?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的示例

代码语言:javascript
复制
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();
 }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67293056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档