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对象.谢谢你到目前为止的答案.
HSSFCell类提供了静态颜色类,如下所示:
http://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html
如果要创建自己的自定义颜色,则需要创建和修改自定义调色板.Apache也为此提供了非常清晰的指南:
http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors
获取颜色: 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)
问候
纪尧姆
你会做类似的事情:
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)
]