2013-03-17 1 views
8

누구든지 Excel에서 특정 텍스트의 색을 변경하는 방법을 알고 있습니다. 아파치 포이 (poi poi)를 사용 중이며 전체 셀의 텍스트 색상을 변경하는 방법을 찾을 수 있습니다. 그러나 나는 특정한 텍스트만을 원한다.apache poi를 사용하여 동일한 셀에서 특정 텍스트 색상을 변경하는 방법?

예 : Cell A1에 Hello World가 있습니다. "Hello"가 파란색으로 표시되고 "World"가 녹색으로 표시됩니다. 어떻게해야합니까?

+0

@BrianRogers 하나의 셀을 확인해 주셔서 감사합니다 여러 가지 색상을 가질 수 있습니다. –

답변

11

키는 HSSFRichTextString 개체를 사용하여 셀 값을 설정합니다. 이 객체는 applyFont 메서드를 가지고 있으며,이 메소드는 startingIndex, endingIndex 및 Font를 허용합니다. 따라서 원하는 색상을 가진 글꼴을 만든 다음 applyFont()를 사용하여 셀 값의 일부에 글꼴을 적용 할 수 있습니다. 여기

내가 함께 자갈길 몇 가지 예제 코드 (완전히 테스트되지 않은)입니다 :

// Set up a rudimentary worksheet with a cell in it 
HSSFWorkbook wb = new HSSFWorkbook(); 
HSSFSheet sheet = wb.createSheet(“sheet1”); 
HSSFRow row = sheet.createRow(0); 
HSSFCell cell = row.createCell(0); 

// Set up fonts 
HSSFFont blueFont = workbook.createFont(); 
blueFont.setColor(HSSFColor.BLUE.index); 

HSSFFont greenFont = workbook.createFont(); 
greenFont.setColor(HSSFColor.GREEN.index); 

// create a cell style and assign the first font to it 
HSSFCellStyle style = workbook.createCellStyle(); 
style.setFont(blueFont); 

// assign the style to the cell 
cell.setCellStyle(style); 

// override the parts of the text that you want to 
// color differently by applying a different font. 
HSSFRichTextString richString = new HSSFRichTextString("Hello, World!"); 
richString.applyFont(6, 13, greenFont); 
cell.setCellValue(richString); 
+0

흥미롭게도 Hello의 색상을 덮어 쓰려면이 방법이 효과가 없습니다. World를 수정하면 똑같은 코드 조각이 작동합니다! Hello의 색상은 재정의되었지만 World는 스타일을 잃습니다. – Achow

+0

명시 적으로 글꼴을 적용하면 고정됩니다. - richString.applyFont (blueFont); richString.applyFont (2, 5, greenFont); – Achow

+1

xlsx 파일의 경우 동일한 방식으로 작동하는 동등한 [XSSFRichTextString] (https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRichTextString.html)이 있습니다. – jamsandwich

-1

먼저이 줄을 코드에 추가됩니다

//////////////////////Excel Header Style///////////////////////// 
     HSSFCellStyle headerlabelcs = wb.createCellStyle(); 
     headerlabelcs.setFillForegroundColor(HSSFColor.PALE_BLUE.index); 
     headerlabelcs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 
     headerlabelcs.setBorderLeft((short)1); 
     headerlabelcs.setBorderRight((short)1); 

     HSSFFont headerlabelfont = wb.createFont(); 
     headerlabelfont.setFontHeightInPoints((short)12); 
     headerlabelfont.setFontName("Calibri"); 
     headerlabelfont.setColor(HSSFColor.BLACK.index); 
     headerlabelfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 
     headerlabelcs.setFont(headerlabelfont); 
       //////////////////////Excel Header Style///////////////////////// 

후 추가 스타일을 만들에

sheet.getRow(rowIndex).getCell(0).setCellStyle(headerlabelcs); 
+1

이 해결책은 OP가 요청한 것을하지 않습니다. 그는 하나의 셀에있는 텍스트의 일부를 두 가지 색상으로 설정하려고합니다. –

+0

그런 다음 텍스트를 기반으로 스타일을 변경하십시오. – Biswajit

관련 문제