如何获取给定单元格的(Java Apache POI HSSF)背景颜色?

jav*_*ava 10 java hssf poi-hssf apache-poi

我有一个现有的excel电子表格,我正在访问并从中读取值,我正在使用Apache POI HSSF.

它初始化如下:

HSSFSheet sheet;
FileInputStream fis = new FileInputStream(this.file);
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
this.sheet = wb.getSheet(exsheet);
Run Code Online (Sandbox Code Playgroud)

我正在遍历工作表中存在的所有单元格,这将生成一个单元格对象:

HSSFCell cell = (HSSFCell) cells.next();
Run Code Online (Sandbox Code Playgroud)

请熟悉该框架的人解释如何创建一个(HSSFColor)对象来表示工作表中每个单元格的背景颜色.

非常感谢

编辑,更新

要清楚我想知道的是:如何为现有单元格的背景颜色创建/获取HSSFColor对象?

cell.getCellStyle().getFillBackgroundColor(); 
Run Code Online (Sandbox Code Playgroud)

此代码仅返回一个短数字,而不是HSSFColor对象.谢谢你到目前为止的答案.

Cra*_*tis 7

HSSFCell类提供了静态颜色类,如下所示:

http://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html

如果要创建自己的自定义颜色,则需要创建和修改自定义调色板.Apache也为此提供了非常清晰的指南:

http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors


PAT*_*ume 5

获取颜色: getFillBackgroundColor返回的short值是颜色的Excel索引.您可以使用RMorrisey指示的最后一个代码获取HSSFColor HashTable中与索引相对应的颜色.

设置颜色: 创建自定义调色板,并更改给定索引处的颜色.然后,将颜色应用于样式.

//creating a custom palette for the workbook
HSSFPalette palette = wb.getCustomPalette();
//replacing the standard red with freebsd.org red
palette.setColorAtIndex(HSSFColor.RED.index,
        (byte) 153,  //RGB red (0-255)
        (byte) 0,    //RGB green
        (byte) 0     //RGB blue
);
// or creating a new Color
HSSFColor myColor = palette.addColor((byte) 153, (byte) 0, (byte) 0); 
HSSFCellStyle style = wb.createCellStyle();

style.setFillForegroundColor(myColor);
Run Code Online (Sandbox Code Playgroud)

问候

纪尧姆


RMo*_*sey 1

你会做类似的事情:

HSSFCell myCell = ...;
HSSFCellStyle myStyle = workbook.createCellStyle();
myStyle.setFillBackgroundColor(HSSFColor.BLUE);

myCell.setCellStyle(myStyle);
Run Code Online (Sandbox Code Playgroud)

我相信给定的工作簿的样式数量有限;您将希望尽可能重用相同的样式对象。

[编辑:抱歉,这将是设置单元格的颜色。要获取颜色,请使用以下命令:

myCell.getCellStyle().getFillBackgroundColor();
Run Code Online (Sandbox Code Playgroud)

]

[编辑2:查看Craig发布的自定义颜色信息,也许你可以尝试:

HSSFColor.getIndexHash().get(myCell.getCellStyle().getFillBackgroundColor())
Run Code Online (Sandbox Code Playgroud)

]