2013-03-17 11 views
8

Kann jemand die Farbe des bestimmten Textes einer Zelle in Excel ändern. Ich benutze Apache poi und ich könnte herausfinden, um die Textfarbe der gesamten Zelle zu ändern. Aber ich will nur einen bestimmten Text.Wie ändert man die spezifische Textfarbe in einer Zelle von Excel-Blatt mit Apache Poi?

ZB: Zelle A1 hat Hello World Ich möchte "Hello" in blau und "World" in grün sein. Wie mache ich das?

+0

@BrianRogers Dank für die Bestätigung einer Zelle kann mehrere Farben haben. –

Antwort

11

Der Schlüssel verwendet das Objekt HSSFRichTextString, um den Wert der Zelle festzulegen. Dieses Objekt verfügt über eine applyFont-Methode, die einen startIndex, endingIndex und eine Schriftart akzeptiert. So können Sie Schriftarten mit den gewünschten Farben erstellen und sie dann mit applyFont() auf Teile des Zellenwerts anwenden.

Hier einige Beispiel-Code ich zusammengeschustert (völlig ungetestet):

// 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

Interessanterweise funktioniert dies nicht, wenn Sie die Farbe von Hallo überschreiben möchten. Das gleiche Stück Code funktioniert, wenn Sie World ändern! Die Farbe von Hello wird überschrieben, aber World verliert seinen Stil. – Achow

+0

Es ist behoben, wenn Sie die Schriftarten explizit anwenden - richString.applyFont (blueFont); richString.applyFont (2, 5, greenFont); – Achow

+1

Für xlsx-Dateien gibt es einen entsprechenden [XSSFRichTextString] (https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRichTextString.html), der auf die gleiche Weise funktioniert. – jamsandwich

-1

zunächst einen Stil

//////////////////////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///////////////////////// 

diese Zeile im Code hinzugefügt werden hinzufügen erstellen dann

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

Diese Lösung erfüllt nicht die Anforderungen des OP. Er möchte Teile des Textes in einer Zelle in zwei verschiedene Farben setzen. –

+0

Dann basierend auf dem Text den Stil ändern – Biswajit

Verwandte Themen