11
votes

Comment puis-je obtenir la couleur de fond (Java Apache Poir HSSF) pour une cellule donnée?

J'ai une feuille de calcul Excel existante, que je suis accessible et de lire des valeurs de, j'utilise Apache POI HSSF.

Il est initialisé comme ceci: p>

cell.getCellStyle().getFillBackgroundColor(); 


1 commentaires

ou cell.getcellstyle (). gedrfillforegroundColor (), la feuille Excel que je lis rend la même couleur pour la couleur d'arrière-plan, même si la cellule est colorée.


8 Réponses :


1
votes

Vous feriez quelque chose comme:

HSSFColor.getIndexHash().get(myCell.getCellStyle().getFillBackgroundColor())


2 commentaires

Merci pour votre réponse jusqu'à présent, malheureusement, ce n'est pas tout à fait une solution, j'ai recommencer la question maintenant.


Mise à jour de ma réponse avec un peu d'aide de Craig's Post



7
votes

Il existe des classes de couleurs statiques fournies par la classe HSSFCell, indiquée ici:

http://poi.apache.org/ APIDOCS / ORG / APACHE / POI / HSSF / UTIL / HSSFCOLOR.HTML

Si vous souhaitez créer vos propres couleurs personnalisées, vous devez créer et modifier une palette personnalisée. Apache fournit également un guide très clair aussi:

http://poi.apache.org/spreadsheet/Quick-Guide. HTML # CustomColors


0 commentaires

5
votes

pour obtenir la couleur: La valeur courte renvoyée par le getfillbackgroundColor est l'indice Excel de la couleur. Vous pouvez obtenir la couleur correspondant à l'index dans la haquetable HSSFColor, à l'aide du dernier code RmorreRarey indiqué.

pour définir une couleur: Vous créez une palette personnalisée et changez la couleur à un index donné. Ensuite, vous appliquez la couleur au style. xxx

regarde

Guillaume


0 commentaires

2
votes

L'arrière-planColor Les informations de xssfcellstyle peuvent obtenir de la méthode: xxx

Vous pouvez l'imprimer et vous verrez sa structure.


0 commentaires

1
votes
import java.io.File;    
import java.io.FileInputStream;       
import java.io.FileNotFoundException;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.util.Iterator;    
import org.apache.poi.hssf.usermodel.HSSFPalette;    
import org.apache.poi.hssf.usermodel.HSSFSheet;    
import org.apache.poi.hssf.usermodel.HSSFWorkbook;    
import org.apache.poi.hssf.util.HSSFColor;    
import org.apache.poi.ss.usermodel.Cell;    
import org.apache.poi.ss.usermodel.CellStyle;    
import org.apache.poi.ss.usermodel.Row;    

/**
 * @author mohdasif_2688@rocketmail.com 
 *
 */

public class ExcelPractice {

    /**
     *  Must Read :     
     *  
     *  Code to get the background color from an excel sheet in RGB Format and display on the console    
     *  Save the content of the xls file into another OUTPUT.xls file.    
     *  Using a sample sheet with only first row filled with background color.    
     *  Code uses HSSF which means i am only using xls format.    
     *  Using poi-3.5-FINAL.jar    
     *  Solution with the output provided      
     *  Observation : Some Custom color's are not recognized as they may not be defined    
     *  in the excel color palette thus the code returns the almost similar color code.    
     */
    public static void main(String[] args) {
        try {
            FileInputStream fileInputStream=new FileInputStream(new     File("D:\\Excel_File.xls"));

            HSSFWorkbook workbook=new HSSFWorkbook(fileInputStream);
            HSSFSheet  sheet=workbook.getSheetAt(0);
            Iterator<Row> rowIterator= sheet.iterator();
            while (rowIterator.hasNext()) {
                Row row=rowIterator.next();

                Iterator<Cell> cellIterator=row.cellIterator();
                while (cellIterator.hasNext()) {
                    Cell cell = (Cell) cellIterator.next();

                        switch (cell.getCellType()) {
                        case Cell.CELL_TYPE_BOOLEAN:
                            System.out.println(cell.getBooleanCellValue()+"\t\t");  
                        System.out.println(cell.getCellStyle().getFillForegroundColor());
                        break;
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.println(cell.getNumericCellValue()+"\t\t");
                        System.out.println(cell.getCellStyle().getFillForegroundColor());
                        break;
                    case Cell.CELL_TYPE_STRING:
                        System.out.println(cell.getStringCellValue()+"\t\t");
                        //System.out.println(HSSFColor.getIndexHash().get(cell.getCellStyle().getFillBackgroundColor()));   
                        int num=cell.getColumnIndex();
                        Cell cell1 = row.getCell(num);
                        CellStyle cellStyle = cell1.getCellStyle();          
                        getColorPattern(cellStyle.getFillForegroundColor());
                        break;
                    default:
                        break;
                    }
                }
                System.out.println();

                fileInputStream.close();
                FileOutputStream fileOutputStream=new FileOutputStream(new File("D:\\OUTPUT.xls"));
                workbook.write(fileOutputStream);
                fileInputStream.close();
            }


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.toString();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

//Method to identify the color pattern
private static short[] getColorPattern(short colorIdx){        
    short[] triplet = null;
    HSSFWorkbook workbook=new HSSFWorkbook();
    HSSFPalette palette = workbook.getCustomPalette();
    HSSFColor color = palette.getColor(colorIdx);
    triplet = color.getTriplet();       
    System.out.println("color : " + triplet[0] +"," + triplet[1] + "," +     triplet[2]);
    return triplet;
}
}

/** Output of the above code as executed in my system 
 S.NO.      
color : 255,255,0
VTU Number      
color : 0,128,0
First Name      
color : 51,204,204
Middle Name     
color : 255,0,0
Last Name       
color : 102,102,153
Branch      
color : 255,102,0
E-mail id       
color : 0,255,0
Mobile Number       
color : 255,255,255 
*/

0 commentaires

1
votes

Pour obtenir la couleur d'arrière-plan de la cellule spécifique en hex, utilisez ceci: xxx

remarque le mot couleur est utilisé deux fois >


0 commentaires

0
votes

Ce qui suit est pour XSSF et est dans SCALA, mais il montre exactement comment obtenir la couleur du modèle d'objet. Je voulais instancier un objet java.awt.color à partir des valeurs RVB réelles (qui est utile en partie parce que mon débogueur s'affiche pour moi la couleur réelle de l'objet lorsque je m'arrête à des points d'arrêt, et en partie parce que cela est destiné à l'exportation vers des systèmes qui ont rien à voir avec Excel). J'ignore la valeur alpha de la couleur et mon scala peut être un peu naïf. Je suggérerais que si cela ne fonctionne pas pour vous, vous devez définir un point de rupture et examiner le résultat d'appels de méthodes étroitement liés tels que GeRefroud Back em> BraseColorColor ()

    val rgb: Array[Byte] = cell.getCellStyle.getFillForegroundColorColor.getRgb
    def toInt(b: Byte): Int = {
      if (b<0) 256+b else b
    }
    val rgbInts = rgb.map(toInt)
    val color = new Color(rgbInts(0),rgbInts(1),rgbInts(2))


0 commentaires

0
votes

pour le fichier XLSX de lecture XSSF (essayé également le HSSF), après la lutte pendant un moment, je viens de trouver gefillbackgroundxsssfcolor () code> méthode réellement renvoyé la "couleur du motif" dans l'onglet de remplissage du "format Cellules "dans Excel, pas la couleur dite" fond "dans cet onglet. Je ne suis pas sûr de savoir si cela s'attendait.

Voir ma capture d'écran ci-dessous. Le RVB renvoyé est en réalité FF0000, c'est-à-dire. ROUGE. P>

        XSSFColor backgroundColor = cell.getCellStyle().
            getFillBackgroundXSSFColor();
    System.out.println("backgroundColor is "+backgroundColor.getARGBHex());

    Output: FFFF0000 //the first FF should be ignored.


0 commentaires