是否可以创建带有预配置排序和过滤的 XLSX 文档?

Is it possible to create an XLSX document with pre-configured sorting and filtering?

我们有一个网络工具,可以向用户显示数据 table 并让他们 a) 将其导出到 XSLX 和 b) 对网页上的 table 进行排序和过滤。我们希望导出的电子表格包含所有数据,但配置过滤器(最好是排序)以反映导出时网页上的选择。

我们正在使用 as_xlsx 直接从 Oracle 导出数据,但我们愿意研究更复杂的方法。我看过 Apache POI,我不知道它是否可以做我们想要的。除此之外, Java 家族中的某些东西会更可取。 XLSX 导出是必须的,文件应该在 Windows 上的 Excel 打开且没有警告。

这可能吗?如果是这样,有没有软件可以让它变得简单?

Apache Poi 可以做到。示例:

final Date FILTER_DATE = /* ... */;

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();

// Insert data

for(int rownum = 0; rownum < 100; rownum++){
    XSSFRow row = sheet.createRow(rownum);

    String name = /* ... */;
    Date birthDate = /* ... */;

    row.createCell(0).setCellValue(name);
    row.createCell(1).setCellValue(birthDate);

    // Manually filter
    if ( ! (
        (name.equals("Alice")) &&
        (DateUtil.getExcelDate(birthDate >= DateUtil.getExcelDate(FILTER_DATE))
    )) {
        row.getCTRow().setHidden(true);
    }
}

// Create filters

sheet.setAutoFilter(CellRangeAddress.valueOf("A1:C100"));

CTAutoFilter autoFilter = sheet.getCTWorksheet().getAutoFilter();

CTFilterColumn nameFilterColumn = autoFilter.insertNewFilterColumn(0);
nameFilterColumn.setColId(0L);
CTFilter nameFilter = nameFilterColumn.addNewFilters().insertNewFilter(0);
nameFilter.setVal("Alice");

CTFilterColumn dateFilterColumn = autoFilter.insertNewFilterColumn(0);
dateFilterColumn.setColId(2L);
CTCustomFilter dateFilter = dateFilterColumn.addNewCustomFilters().addNewCustomFilter();
dateFilter.setOperator(STFilterOperator.GREATER_THAN_OR_EQUAL);
dateFilter.setVal(Double.toString(DateUtil.getExcelDate(FILTER_DATE)));

workbook.write(System.out);