首页 > 解决方案 > 是否可以锁定在 apache poi 中解锁的 excel 表离开组大纲功能?

问题描述

我使用 apache poi 创建了以下示例

在此处输入图像描述

使用以下代码

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Main {
    public static final String file = "C:\\Users\\Deepak\\IdeaProjects\\Test\\src\\main\\resources\\test.xlsx";

    public static void main(String[] args) throws IOException {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("sheet1");
        for(int row = 0;row < 10;row++) {
            Row rowI = sheet.createRow(row);
            Cell cell = rowI.createCell(0);
            cell.setCellValue("cell"+row+'0');
        }
        sheet.groupRow(1, 5);
        sheet.setRowGroupCollapsed(1, true);
        sheet.protectSheet("dummy");
        workbook.write(new FileOutputStream(new File(file)));
    }
}

工作表已锁定,但折叠 (+) 功能也已锁定。我不希望折叠按钮被锁定。有没有办法解决这个问题?

我用谷歌搜索了这个,但没有找到任何关于 apache POI 的东西。我在这里找到了 VBA 的解决方案,并试图在 apache poi 中找到类似的方法(enableOutlining),但没有找到。

我正在使用 Apache POI 3.9

任何帮助/指导将不胜感激

标签: javaapache-poi

解决方案


不,这是不可能的。在工作表受到保护时,没有启用大纲的设置。至少没有一个存储在文件中。

Worksheet.EnableOutlining。但这只有在设置了纸张保护时才能设置UserInterfaceOnly:=True。这意味着只有在Excel's中打开工作簿时保护才有效GUI

请参阅http://www.spreadsheet1.com/outlining.html。还有Excel: EnableOutlining 在打开 workbook 时似乎默认为 False

结论:仅当工作簿包含VBA并且能够运行宏并运行该VBA保护代码时才有可能,而Workbook_Open().


推荐阅读