Apache POI:部分单元格字体

时间:2012-03-07 06:01:25

标签: apache excel apache-poi

如果我打开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 个答案:

答案 0 :(得分:5)

POI支持它,您正在寻找的课程是RichTextString。如果您的单元格是文本单元格,则可以为其获取RichTextString,然后将字体应用于其中的不同部分,以使文本的不同部分看起来不同。

答案 1 :(得分:2)

如果使用SXSSFWorkbook,您将被耗尽,因为它不支持此类格式化。 在这里查看。 http://apache-poi.1045710.n5.nabble.com/RichTextString-isn-t-working-for-SXSSFWorkbook-td5711695.html

答案 2 :(得分:0)

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);