Я пытаюсь применить жирный шрифт к частям строки и поместить его в ячейку.
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);
Этот код, как часть моего кода, который создает файл .xlsx
и производитфайл не поврежден, но текст, который должен быть выделен жирным шрифтом, неверен. Вместо этого он выделяется от начала текста до индекса, который я установил как конечный индекс в методе applyFont()
. По какой-то причине startIndex
игнорируется.
Во время отладки оба значения startIndex
и возвращаемое значение getEndOfWord()
являются правильными.
РЕДАКТИРОВАТЬ:
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();
}
Это мой метод для создания моего .xlsx
файла. Параметр метода: String firstLine, List<MuiDetailReport> lst, File csvFile
. Переменная со всеми заглавными символами static final String
Мой результат " Hellomyname isThad" вместо "Hellomy name isThad"