L'accès à la palette de couleurs dans un XSSFWorkbook
Lors de l'utilisation de POI, des cellules et des polices dans les documents excel contiennent des informations de couleur qui ne renvoie pas toujours une valeur rvb et, souvent, elle propose uniquement une valeur d'index. La valeur indexée doit être recherchée à l'encontre de quelque chose pour obtenir une couleur. Dans un HSSFWorkbook (xls) il y a une méthode pour obtenir la palette:
InputStream in = new FileInputStream("sheet.xls");
HSSFWorkbook wb = new HSSFWorkbook(in);
wb.getCustomPalette();
Lors de l'accès à un XSSFWorkbook (xlsx) il n'y a pas une telle méthode et, en fait, je ne peux trouver aucune palette d'informations n'importe où dans les classes associées. Je suis en mesure d'obtenir la valeur de l'indice de XSSFont et de la Cellule, mais la seule façon d'obtenir une couleur "nom" est pour le match contre le IndexedColors enum. Cela me renvoie le même problème; je n'ai pas encore de valeur rvb à utiliser.
InputStream in = new FileInputStream("sheet.xlsx");
XSSFWorkbook wb = new XSSFWorkbook (in);
wb.getCustomPalette(); <-- fail!
Je suis le XSSFColor par le biais de la CellStyle, comme suit:
CellStyle style = cell.getCellStyle();
XSSFColor color = style.getFillBackgroundColorColor();
Pour obtenir un nom de couleur via IndexedColors:
for (IndexedColors c : IndexedColors.values()) { if (c.index == indexColor){ System.out.println("Color: " + c.name()); } }
Des questions similaires: Comment puis-je obtenir de l' (Java Apache POI HSSF) Couleur de Fond d'une cellule donnée?
Référence: http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors
mise à Jour 1: j'ai trouvé quelque chose qui fonctionne, enfin. Cette méthode de XSSFColor renvoie l'ARGB hex code et il me permet de déterminer les valeurs RVB (évidemment). J'espère que cela aide à économiser un nombre x d'heures pour quelqu'un avec le même problème.
((XSSFColor) color).getARGBHex())
mise à Jour 2: Beaucoup à mon grand désarroi, j'ai trouvé que certaines Cellules ne sont pas de retour arrière-plan XSSFColor contenant ARGBHex de données. La recherche d'un travail autour de cela.
OriginalL'auteur Paul Gregoire | 2013-08-07
Vous devez vous connecter pour publier un commentaire.
À l'aide de
wb.getStylesSource()
, vous pouvez obtenir unStylesTable
, à partir de laquelle vous pouvez obtenir toutes lesCellStyle
objets. LeXSSFCellStyle
API a n'importe quel nombre de méthodes pour obtenir des objets de couleur - à savoir, unXSSFColor
. LeXSSFCellStyle
API a également accès à toutes les polices dans ce style - à savoir,XSSFFont
, à partir de laquelle vous pouvez encore obtenir unXSSFColor
objet spécifique de la police.Une fois que vous avez obtenu l'accès à cette
XSSFColor
, un appel àgetRGB()
vous renvoie un tableau d'octets des valeurs RVB.OriginalL'auteur akokskis
Vous n'allez pas obtenir exactement ce que vous cherchez ici. Il n'y a pas un équivalent XSSF version de HSSFPalette. Il n'y a pas une nécessité pour depuis l'HSSFWorkbook avait une quantité très limitée de couleurs, il pourrait travailler avec. Les instructions données dans la lien que vous avez fourni est le plus proche que vous obtiendrez. Si vous vous demandez simplement comment puis-je savoir de quelle couleur est signifié par le retour de getRGB() une fois que j'ai un XSSFColor objet, vous pouvez toujours vous référer à cette site web qui vous permettra de saisir les valeurs RVB et de voir la couleur, si vous êtes à la recherche d'un nom de couleur, vous aurez à créer votre propre utilitaire qui vous avez stocké connu valeurs rvb de couleurs et de disposer d'une méthode permettant de voir laquelle est la plus proche de votre retour RVB. C'est le mieux que je puisse faire l'homme, je ne suis pas au courant de quelque chose qui va vous donner cette fonctionnalité de la boîte.
OriginalL'auteur Ithamar Diaz
Une chose à regarder dehors pour est Excel inverse le sens de premier plan et d'arrière-plan pour le solide motif de remplissage dans les cellules ordinaires*. Alors peut-être vous avez besoin d'utiliser le
getFillForegroundColorColor()
méthode pour les cellules avec un modèle solide de type.Aussi, la lecture de revenir à votre question précédente, 64 n'est pas valide d'un indice de couleur depuis la plage est de 0..63. L'indice de 64 est utilisé pour indiquer la valeur par défaut couleur d'avant-plan dans une cellule.
(*) Dans la mise en forme conditionnelle des cellules qu'il ne fait pas cela!!
OriginalL'auteur jmcnamara