Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApachePOI:部分单元格字体_Apache_Excel_Apache Poi - Fatal编程技术网

ApachePOI:部分单元格字体

ApachePOI:部分单元格字体,apache,excel,apache-poi,Apache,Excel,Apache Poi,如果我打开MS Excel(我假设)或LibreOffice Calc(已测试),我可以在单元格中键入内容,并更改单元格中部分文本的字体,例如在一个单元格中执行: 此文本为粗体,此文本为斜体 让我再次重申,这个字符串可以以显示的格式存在于一个单元格中 使用ApachePOI可以实现这种定制级别吗?搜索似乎只显示如何将字体应用于整个单元格 谢谢 ==更新=== 正如下面所建议的,我最终使用了HSSFRichTextString(因为我正在使用HSSF)。但是,在应用字体(我尝试了粗体和下划线)之后

如果我打开MS Excel(我假设)或LibreOffice Calc(已测试),我可以在单元格中键入内容,并更改单元格中部分文本的字体,例如在一个单元格中执行:

此文本为粗体,此文本为斜体

让我再次重申,这个字符串可以以显示的格式存在于一个单元格中

使用ApachePOI可以实现这种定制级别吗?搜索似乎只显示如何将字体应用于整个单元格

谢谢

==更新===

正如下面所建议的,我最终使用了HSSFRichTextString(因为我正在使用HSSF)。但是,在应用字体(我尝试了粗体和下划线)之后,我的文本将保持不变。这就是我所尝试的。把事情放在上下文中,我正在做一些与体育相关的事情,在这种情况下,以“awayteam”@“homesteam”的形式显示比赛是很常见的,并且根据某些外部条件,我想将其中一个加粗。我的代码如下所示:

    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

POI确实支持它,您要找的课程是。如果您的单元格是文本单元格,您可以为其获取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);