Apache POI: частичные ячейки шрифтов - PullRequest
5 голосов
/ 07 марта 2012

Если я открою MS Excel (я полагаю) или LibreOffice Calc (протестировано), я могу напечатать материал в ячейке и изменить шрифт частей текста в ячейке, например, выполнить в одной ячейке, :

Этот текст выделен жирным шрифтом и Этот текст выделен курсивом

Снова, позвольте мне повторить, что эта строка может существовать в указанном формате в одной ячейке.

Можно ли достичь этого уровня настройки с помощью Apache POI? Поиск только показывает, как применить шрифт ко всей ячейке.

Спасибо

=== UPDATE ===

Как предложено ниже, я закончил с HSSFRichTextString (как я работаю с HSSF). Однако после применения шрифтов (я попытался выделить жирным шрифтом и подчеркнуть), мой текст не изменился. Это то, что я пытался. Чтобы поместить вещи в контекст, я работаю над чем-то связанным со спортом, в котором обычно отображается совпадение в форме "awayteam" @ "hometeam", и в зависимости от определенных внешних условий, я хотел бы сделать один или другой жирный. Мой код выглядит примерно так:

    String away = "foo";
    String home = "bar";
    String bolden = "foo"
    HSSFRichTextString val = new HSSFRichTextString(away+"@"+home);

    if(bolden.equals(home)) {
        val.applyFont(val.getString().indexOf("@") + 1, val.length(), Font.U_SINGLE);
    } else if(bolden.equals(away)) {
        val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE);
    }
    gameHeaderRow.createCell(g + 1).setCellValue(val);

Как вы можете видеть, это фрагмент кода из более сложной функции, чем отображается, но основной удар это фактический код. Как вы можете видеть, я делаю val.applyFont для части строки, а затем устанавливаю значение ячейки со строкой. Так что я не совсем уверен, что я там не так сделал. Любой совет приветствуется.

Спасибо

KFJ

Ответы [ 3 ]

5 голосов
/ 07 марта 2012

POI поддерживает его, класс, который вы ищете - RichTextString .Если ваша ячейка является текстовой, вы можете получить RichTextString для нее, а затем применить шрифты к разным ее частям, чтобы разные части текста выглядели по-разному.

2 голосов
/ 09 февраля 2014

Вы будете опустошены, если будете работать с SXSSFWorkbook, так как он не поддерживает такое форматирование.Проверьте это здесь.http://apache -poi.1045710.n5.nabble.com / RichTextString-ISN-трет-рабочий-для-SXSSFWorkbook-td5711695.html

0 голосов
/ 25 ноября 2016
val.applyFont(0, val.getString().indexOf("@"), Font.U_SINGLE);

Вы не должны передавать Font.U_SINGLE в applyFont, но должны использовать новый шрифт, такой как new HSSFFont(), затем setUnderline(Font.U_SINGLE).

пример:

HSSFFont f1 = new HSSFFont();
f1.setUnderline(Font.U_SINGLE);
val.applyFont(0, val.getString().indexOf("@"), f1);
...