ApachePOI:部分单元格字体
如果我打开MS Excel(我假设)或LibreOffice Calc(已测试),我可以在单元格中键入内容,并更改单元格中部分文本的字体,例如在一个单元格中执行: 此文本为粗体,此文本为斜体 让我再次重申,这个字符串可以以显示的格式存在于一个单元格中 使用ApachePOI可以实现这种定制级别吗?搜索似乎只显示如何将字体应用于整个单元格 谢谢 ==更新=== 正如下面所建议的,我最终使用了HSSFRichTextString(因为我正在使用HSSF)。但是,在应用字体(我尝试了粗体和下划线)之后,我的文本将保持不变。这就是我所尝试的。把事情放在上下文中,我正在做一些与体育相关的事情,在这种情况下,以“awayteam”@“homesteam”的形式显示比赛是很常见的,并且根据某些外部条件,我想将其中一个加粗。我的代码如下所示:ApachePOI:部分单元格字体,apache,excel,apache-poi,Apache,Excel,Apache Poi,如果我打开MS Excel(我假设)或LibreOffice Calc(已测试),我可以在单元格中键入内容,并更改单元格中部分文本的字体,例如在一个单元格中执行: 此文本为粗体,此文本为斜体 让我再次重申,这个字符串可以以显示的格式存在于一个单元格中 使用ApachePOI可以实现这种定制级别吗?搜索似乎只显示如何将字体应用于整个单元格 谢谢 ==更新=== 正如下面所建议的,我最终使用了HSSFRichTextString(因为我正在使用HSSF)。但是,在应用字体(我尝试了粗体和下划线)之后
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,然后使用该字符串设置单元格值。所以我不完全确定我做错了什么。任何建议都将不胜感激
谢谢
KFJPOI确实支持它,您要找的课程是。如果您的单元格是文本单元格,您可以为其获取RichTextString,然后将字体应用于单元格的不同部分,以使文本的不同部分看起来不同。如果使用SXSSFWorkbook,您将被耗尽,因为它不支持这种格式。 在这里检查一下。 您不应该将
Font.U\U SINGLE
传递给applyFont
,而是传递一种新字体,例如new hsffort()
,然后setUnderline(Font.U\U SINGLE)
例如:
HSSFFont f1 = new HSSFFont();
f1.setUnderline(Font.U_SINGLE);
val.applyFont(0, val.getString().indexOf("@"), f1);
谢谢你回答我的问题。我在工作,这是一个辅助项目,所以今晚我会试试这个,如果它有效,我会勾选你的答案:)哇。这比我预期的要花更长的时间。很抱歉。不管怎么说,它没有成功。没有错误或任何东西,但文本仍然未格式化。我将在这里编辑我的帖子,并向您展示正在发生的事情。如果您将该字体应用于整个单元格(通过样式),它看起来像您期望的那样吗?(这将是检查字体是否正确的一个好方法)而且……侧面项目一直处于次要地位。我不断地戳它,最终它成功了。谢谢你的帮助!我很感谢你的评论,我想让这个帖子保持更新,但这是一个老问题,已经有了一个公认的答案。随时欢迎新成员加入StackExchange universe,但您可能希望单击页面顶部的“帮助”->“参观”。非常感谢您的帮助!我明白,它实际上应该是一个评论,并没有提供问题的答案,但它拯救了我的夜晚。非常感谢你!
HSSFFont f1 = new HSSFFont();
f1.setUnderline(Font.U_SINGLE);
val.applyFont(0, val.getString().indexOf("@"), f1);