I am trying to apply bold font on parts of a string and place it in a cell.
XSSFFont font = workbook.createFont();
font.setBold(true);
XSSFCellStyle style = workbook.createCellStyle();
style.setFont(font);
XSSFCell c = nextRow.createCell(4);
c.setCellStyle(style);
XSSFRichTextString string = new XSSFRichTextString(report.getSurroundText());
string.applyFont( startIndex, getEndOfWord(startIndex, report.getFoundWord()), font);
c.setCellValue(string);
This code, as part of my code that produces an .xlsx
file and it does produce a not corrupt file, but the text that should be bold is not correct. Instead it highlights from the start of the text to the index I set as end index in the applyFont()
method. Basicly for some reason startIndex
is ignored.
During debug, both startIndex
and the return value of getEndOfWord()
is correct.
EDIT:
try(FileOutputStream fileOut = new FileOutputStream(new File(directory.getAbsoluteFile() + File.separator +
FilenameUtils.getBaseName(csvFile.getAbsolutePath()) + ".xlsx"));) {
try (XSSFWorkbook workbook = new XSSFWorkbook()) {
XSSFSheet sheet = workbook.createSheet("Highlights");
XSSFRow headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue(firstLine);
XSSFRow titleRow = sheet.createRow(1);
titleRow.createCell(0).setCellValue(SCANID);
titleRow.createCell(1).setCellValue(DOCID);
titleRow.createCell(2).setCellValue(FOUNDWORD);
titleRow.createCell(3).setCellValue(OFFSET);
titleRow.createCell(4).setCellValue(SURROUNDTEXT);
XSSFFont font = workbook.createFont();
font.setBold(true);
XSSFFont deFont = workbook.createFont();
font.setBold(false);
int row = 2;
for (MuiDetailReport report : lst) {
XSSFRow nextRow = sheet.createRow(row);
nextRow.createCell(0).setCellValue(report.getScanId());
nextRow.createCell(1).setCellValue(report.getDocId());
nextRow.createCell(2).setCellValue(report.getFoundWord());
if (report.getOffset() != 0) nextRow.createCell(3).setCellValue(report.getOffset());
else nextRow.createCell(3).setCellValue("");
if (!report.getFoundWord().isBlank() && !report.getSurroundText().isBlank()) {
int startIndex = getStartOfWord(report.getFoundWord(), report.getSurroundText());
if (startIndex == -1) nextRow.createCell(4).setCellValue("");
else {
XSSFCell c = nextRow.createCell(4);
XSSFRichTextString string = new XSSFRichTextString(report.getSurroundText());
string.applyFont(startIndex, getEndOfWord(startIndex, report.getFoundWord()), font);
c.setCellValue(string);
}
} else nextRow.createCell(4).setCellValue("");
row++;
}
workbook.write(fileOut);
}
fileOut.flush();
}
This is my method for creating my .xlsx
file. Method parameter: String firstLine, List<MuiDetailReport> lst, File csvFile
. Variable with all uppercase characters are static final String
My result is "HellomynameisThad" instead of "HellomynameisThad"