2017-02-18 14 views
1

jXLS 1.xのダイナミックセルスタイリングのexampleがありますが、AreaListenerにはthis exampleより近いものは見つかりません。 jXLS 2.3 - リスナを追加して、セルの内容に応じてセルスタイルを更新しますか?

私のような追加(XLS世代のための非常に基本的なテンプレート、と私は私が特定の細胞のためのスタイルを変更することができますいくつかのリスナーを追加することができますどのように

context.putVar("headers", columns); 
context.putVar("data", cells); 
context.getConfig().setCellStyleMap(); 
JxlsHelper.getInstance().processTemplate(is, result, context); 

のような単純な処理コードを持っています値が特定のパターンの場合は、N文字よりも長いテキストの折り返し、または背景色を変更します)。あなたはmainメソッドでは、この

のようにそれを達成することができます

答えて

2

 try(InputStream is = HighlightDemo.class.getResourceAsStream("highlight_template.xls")) { 
     try (OutputStream os = new FileOutputStream("target/highlight_output.xls")) { 
      PoiTransformer transformer = PoiTransformer.createTransformer(is, os); 
      AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer, false); 
      List<Area> xlsAreaList = areaBuilder.build(); 
      Area mainArea = xlsAreaList.get(0); 
      Area loopArea = xlsAreaList.get(0).getCommandDataList().get(0).getCommand().getAreaList().get(0); 
      loopArea.addAreaListener(new HighlightCellAreaListener(transformer)); 
      Context context = new Context(); 
      context.putVar("employees", employees); 
      mainArea.applyAt(new CellRef("Result!A1"), context); 
      mainArea.processFormulas(); 
      transformer.write(); 
     } 
    } 

この例で使用されるテンプレートは、Object Collection Demoサンプルと同じです。最も難しいのは、AreaListenerを適用する領域を見つけることです。この場合、私はちょうど私が2000年

AreaListener実装上の支払いを持つ従業員を強調したいEachCommandエリアへのルート領域から横断はAreaListener example

public class HighlightCellAreaListener implements AreaListener { 
    private final CellRef paymentCell = new CellRef("Template!C4") 
... 
    public void afterTransformCell(CellRef srcCell, CellRef targetCell, Context context) { 
    System.out.println("Source: " + srcCell.getCellName() + ", Target: " + targetCell.getCellName()); 
    if(paymentCell.equals(srcCell)){ // we are at employee payment cell 
     Employee employee = (Employee) context.getVar("employee"); 
     if(employee.getPayment().doubleValue() > 2000){ // highlight payment when >= $2000 
      logger.info("highlighting payment for employee " + employee.getName()); 
      highlightCell(targetCell); 
      } 
     } 
    } 
private void highlightCell(CellRef cellRef) { 
    Workbook workbook = transformer.getWorkbook(); 
    Sheet sheet = workbook.getSheet(cellRef.getSheetName()); 
    Cell cell = sheet.getRow(cellRef.getRow()).getCell(cellRef.getCol()); 
    CellStyle cellStyle = cell.getCellStyle(); 
    CellStyle newCellStyle = workbook.createCellStyle(); 
    newCellStyle.setDataFormat(cellStyle.getDataFormat()); 
    newCellStyle.setFont(workbook.getFontAt(cellStyle.getFontIndex())); 
    newCellStyle.setFillBackgroundColor(cellStyle.getFillBackgroundColor()); 
    newCellStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex()); 
    newCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    cell.setCellStyle(newCellStyle); 
} 
のものと似ています
関連する問題