2016-08-09 5 views
1

ユーザーにデータテーブルを表示し、a)XSLXにエクスポートし、b)Webページ上のテーブルをソートしてフィルタリングするWebツールがあります。エクスポートされたスプレッドシートにすべてのデータが含まれるようにしたいが、エクスポート時にウェブページの選択内容を反映するようにフィルタ(および、好ましくはソート)を構成することが望ましい。あらかじめ設定されたソートとフィルタリングを使用してXLSXドキュメントを作成することはできますか?

私たちは、as_xlsxを使用してOracleから直接データをエクスポートしていますが、より洗練された方法を検討しています。私はApache POIを見てきました。私たちが望むことができるかどうかはわかりません。それ以外に、Javaファミリーのものが望ましいでしょう。 XLSXエクスポートは必須であり、ファイルはWindows上でExcelで警告なしで開く必要があります。

これはまったく可能ですか?もしそうなら、それを簡単にするソフトウェアはありますか?

答えて

0

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); 
関連する問題