I have googled some code and found some answers but not able to get my excel file output in Bold and set background color. I have tried with following code. can you please tell me where am I going wrong? Please take a look. Thanks.
FYI: I am going to make 1st Row in BOLD with blue or any Light color
background. If you know please help with the code.
// Excel file generation code
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Readings");
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setFontHeightInPoints((short)11);
font.setFontName(HSSFFont.FONT_ARIAL);
font.setBoldweight(HSSFFont.COLOR_NORMAL);
font.setBold(true);
font.setColor(HSSFColor.DARK_BLUE.index);
style.setFont(font);
// Freeze 1st Row
sheet.createFreezePane(0, 1);
HSSFRow row = sheet.createRow(1);
HSSFRow rowhead = sheet.createRow((short) 0);
rowhead.setRowStyle(style);
rowhead.createCell(0).setCellValue("RUN");
rowhead.createCell(1).setCellValue("NUMBER");
You are doing wrong in the following:
1- You are not setting any Background color;
2- When you create the new cells they override the row style, so you need to set
the style for each new cell you create;
Below is the working code:
FileOutputStream fileOut = new FileOutputStream("poi-test.xls");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Readings");
CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setFontHeightInPoints((short)11);
font.setFontName(HSSFFont.FONT_ARIAL);
font.setBoldweight(HSSFFont.COLOR_NORMAL);
font.setBold(true);
font.setColor(HSSFColor.DARK_BLUE.index);
style.setFont(font);
//Add these lines
style.setFillForegroundColor(IndexedColors.AQUA.getIndex());
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
sheet.createFreezePane(0, 1); // Freeze 1st Row sheet.createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)
HSSFRow rowhead = sheet.createRow((short) 0);
rowhead.setRowStyle(style);
//Set the cell0 Style
HSSFCell cell0 = rowhead.createCell(0);
cell0.setCellStyle(style);
cell0.setCellValue("ROW");
//Set the cell1 Style
HSSFCell cell1 = rowhead.createCell(1);
cell1.setCellStyle(style);
cell1.setCellValue("NUMBER");
workbook.write(fileOut);
file output:
First remove font.setBoldweight(HSSFFont.COLOR_NORMAL);
. COLOR_NORMAL is not really a Boldweight, but a color. font.setBold(true);
should be sufficient to bold your text.
You also need to add some properties to your style to get the background color. This is the confusing part. The approach is to use a Fill. Fills have Foreground and Background colors distinct from the rest of the cell. To get a solid fill, you need to use:
style.setForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
Notice that this sets the foreground color of the fill to light blue. Since the fill has a solid foreground, that is all you need. If you chose one of the pattern fills, you would need to set the background color for the fill as well. The fill itself is the cell background.