2017-09-18 7 views
0

내가 HSSFWorkbook에 대한 셀 스타일을 만들 회색 :HSSF 아파치 셀 스타일은 모든 세포는

private static HSSFCellStyle createNewColorCellStyle(Map<Color, HSSFCellStyle> cellStylesMap, HSSFWorkbook workbook, Color color) { 

    if (cellStylesMap.get(color) == null) { 
     HSSFCellStyle cellStyle = workbook.createCellStyle(); 
     HSSFColor hssfColor = setColor(workbook, (byte) color.getRed(), (byte) color.getGreen(), (byte) color.getBlue()); 
     cellStyle.setFillForegroundColor(hssfColor.getIndex()); 
     cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
     cellStyle.setBorderTop(CellStyle.BORDER_THIN); 
     cellStyle.setBorderLeft(CellStyle.BORDER_THIN); 
     cellStyle.setBorderBottom(CellStyle.BORDER_THIN); 
     cellStyle.setBorderRight(CellStyle.BORDER_THIN); 

     cellStylesMap.put(color, cellStyle); 
    } 

    return cellStylesMap.get(color); 
} 

내가 셀 스타일

private static HSSFColor setColor(HSSFWorkbook workbook, byte r, byte g, byte b) { 
    HSSFPalette palette = workbook.getCustomPalette(); 
    HSSFColor hssfColor = null; 
    try { 
     hssfColor = palette.findColor(r, g, b); 
     if (hssfColor == null) { 
      palette.setColorAtIndex(HSSFColor.BLUE_GREY.index, r, g, b); 
      HSSFColor hssfColor = palette.getColor(HSSFColor.BLUE_GREY.index); 
     } 
    } catch (Exception e) { 
     LOGGER.info(String.valueOf(e)); 
    } 

    return hssfColor; 
} 

에 색상을 설정하는 기능이있다 그리고 그에서 사용 방법, 여기서 내 스타일을 HSSFCell로 설정했습니다. 내지도 스타일을 사용하는 기능입니다. 루프에서 행과 셀을 만듭니다.

void excell(Path path, JTable table) { 
    try { 
     HSSFWorkbook fWorkbook = new HSSFWorkbook(); 
     HSSFSheet fSheet = fWorkbook.createSheet("the sheet"); 
     Map<Color, HSSFCellStyle> cellStylesMap = new HashMap<>(); 
     TableModel model = table.getModel(); 
      for (int i = 0; i < model.getRowCount(); i++) { 
       HSSFRow fRow = fSheet.createRow((short) i); 
       for (int j = 0; j < table.getColumnModel().getColumnCount(); j++) { 
         HSSFCell cell = fRow.createCell(j); 
         cell.setCellValue(model.getValueAt(i, j)); 
         Component c = table.getCellRenderer(i, j).getTableCellRendererComponent(table, cell, table.isCellSelected(i, j), table.hasFocus(), i, j); 
         Color color = c.getBackground() != null ? c.getBackground() : table.getBackground(); 
         cell.setCellStyle(createNewColorCellStyle(cellStylesMap, fWorkbook, color)); 
        } 
       } 
     } 

     FileOutputStream fileOutputStream; 
     fileOutputStream = new FileOutputStream(path.toString()); 
     BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream); 
     fWorkbook.write(bos); 
     bos.close(); 
     fileOutputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

그리고 내 모든 셀은 하나의 색입니다. 기계에 따라 색상이 다릅니다. 어떤 오류가 있습니까? 왜 모든 색상이 탁월합니까? 나는 내가 뭘 잘못했는지 이해하지 못한다. 감사합니다. .

+0

워크 북 및 셀을 작성하는 방법에 대한 간략하지만 완전한 버전을 제공해주십시오. – JensS

+0

@JenS - 내 게시물을 편집했습니다. –

답변

0

기본적으로 테이블 구성 요소의 배경색을 Excel로 복사합니다. 당신은 디버그/어떤 색인지 찾아야 할 것입니다.

나는 모두 같은 색이라고 가정합니다. 그래서 Excel에서 좋은 색을 얻습니다.

경우 - 예를 들어 - 당신이

Color color = c.getBackground() != null ? c.getBackground() : table.getBackground(); 

Color color = (i % 2 == 0 ? Color.RED : Color.BLUE); 

에 변경 당신은 빨간색과 파란색 행의 혼합을 얻을 - 그래서 당신의 코드 작업을 수행합니다. 기본적으로 어떤 색상이 createNewColorCellStyle에 들어가는 지 확인한 다음 그 방법으로 변경해야합니다.

또한 setColor에서 hssfColor를 두 번 정의합니다. 줄에

HSSFColor hssfColor = palette.getColor(HSSFColor.BLUE_GREY.index); 

당신은 선언 HSSFColor를 삭제해야합니다.

+0

마지막 호를 가져 주셔서 감사합니다. 이전에 해결했지만 코드를 여기에 잊어 버렸습니다. 그리고 createNewColorCell의 색상에 대해서는 서로 다르며지도에 같은 수의 스타일이 있습니다. 필자의 경우 4. –

+0

그러나 필자는 통합 문서를 채우기 위해지도의 마지막 스타일을 사용한다는 것을 알게되었습니다. –

+0

c.getBackground()! = null 뒤에 어떤 값의 색상이 있는지 확인 했습니까? c.getBackground() : table.getBackground()? – JensS