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();
8 Réponses :
Vous feriez quelque chose comme:
HSSFColor.getIndexHash().get(myCell.getCellStyle().getFillBackgroundColor())
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
Il existe des classes de couleurs statiques fournies par la classe HSSFCell, indiquée ici: P>
http://poi.apache.org/ APIDOCS / ORG / APACHE / POI / HSSF / UTIL / HSSFCOLOR.HTML P>
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: P>
http://poi.apache.org/spreadsheet/Quick-Guide. HTML # CustomColors P>
pour définir une couleur: strong>
Vous créez une palette personnalisée et changez la couleur à un index donné. Ensuite, vous appliquez la couleur au style. P> regarde p> Guillaume P> P>
L'arrière-planColor Les informations de xssfcellstyle peuvent obtenir de la méthode: Vous pouvez l'imprimer et vous verrez sa structure. P> P>
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 */
Pour obtenir la couleur d'arrière-plan de la cellule spécifique en hex, utilisez ceci: remarque le mot couleur code> est utilisé deux fois p> p> p> P> P> P> P> >
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))
pour le fichier XLSX de lecture XSSF (essayé également le HSSF), après la lutte pendant un moment, je viens de trouver Voir ma capture d'écran ci-dessous. Le RVB renvoyé est en réalité FF0000, c'est-à-dire. ROUGE. P> 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.
XSSFColor backgroundColor = cell.getCellStyle().
getFillBackgroundXSSFColor();
System.out.println("backgroundColor is "+backgroundColor.getARGBHex());
Output: FFFF0000 //the first FF should be ignored.
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.