Excel 是否可以使用预先配置的排序和筛选创建XLSX文档?

Excel 是否可以使用预先配置的排序和筛选创建XLSX文档?,excel,export-to-excel,xlsx,Excel,Export To Excel,Xlsx,我们有一个web工具,它向用户显示一个数据表,并允许他们a)将其导出到XSLX,b)在网页上对表进行排序和筛选。我们希望导出的电子表格包含所有数据,但配置了过滤器(最好是排序),以在导出时镜像网页上的选择 我们使用as_xlsx直接从Oracle导出数据,但我们愿意研究更复杂的方法。我看过ApachePOI,但我不知道它是否能满足我们的需求。除此之外,Java家族中的一些东西更可取。XLSX导出是必须的,文件应在Windows上的Excel中打开,无警告 这可能吗?如果是这样的话,有没有软件可以

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

我们使用as_xlsx直接从Oracle导出数据,但我们愿意研究更复杂的方法。我看过ApachePOI,但我不知道它是否能满足我们的需求。除此之外,Java家族中的一些东西更可取。XLSX导出是必须的,文件应在Windows上的Excel中打开,无警告

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

这是有可能的。例如:

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);
final Date FILTER_Date=/*…*/;
XSSFWorkbook工作簿=新XSSFWorkbook();
XSSFSheet sheet=workbook.createSheet();
//插入数据
对于(int-rownum=0;rownum<100;rownum++){
XSSFRow row=sheet.createRow(rownum);
字符串名称=/*…*/;
出生日期=/*…*/;
row.createCell(0).setCellValue(名称);
row.createCell(1).setCellValue(生日);
//手动过滤
如果((
(name.equals(“爱丽丝”))&&
(DateUtil.getExcelDate(生日>=DateUtil.getExcelDate(筛选日期))
)) {
row.getCTRow().setHidden(true);
}
}
//创建过滤器
sheet.setAutoFilter(CellRangeAddress.valueOf(“A1:C100”);
CTAutoFilter autoFilter=sheet.getCTWorksheet().getAutoFilter();
CTFilterColumn name FilterColumn=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_大于或等于);
dateFilter.setVal(Double.toString(DateUtil.getExcelDate(FILTER_DATE));
工作簿。写入(系统。输出);
可以使用。例如:

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);
final Date FILTER_Date=/*…*/;
XSSFWorkbook工作簿=新XSSFWorkbook();
XSSFSheet sheet=workbook.createSheet();
//插入数据
对于(int-rownum=0;rownum<100;rownum++){
XSSFRow row=sheet.createRow(rownum);
字符串名称=/*…*/;
出生日期=/*…*/;
row.createCell(0).setCellValue(名称);
row.createCell(1).setCellValue(生日);
//手动过滤
如果((
(name.equals(“爱丽丝”))&&
(DateUtil.getExcelDate(生日>=DateUtil.getExcelDate(筛选日期))
)) {
row.getCTRow().setHidden(true);
}
}
//创建过滤器
sheet.setAutoFilter(CellRangeAddress.valueOf(“A1:C100”);
CTAutoFilter autoFilter=sheet.getCTWorksheet().getAutoFilter();
CTFilterColumn name FilterColumn=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_大于或等于);
dateFilter.setVal(Double.toString(DateUtil.getExcelDate(FILTER_DATE));
工作簿。写入(系统。输出);