如果我打开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
答案 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);