NPOI如何创建包含加粗和非加粗文本的单元格

29

我正在使用NPOI在Asp.Net MVC应用程序中输出Excel,对于纯文本非常有效,但现在被要求添加格式并且在需要一个单元格内有粗体文本后面跟着非粗体文本的情况下遇到问题。例如:

这段文字是粗体 - 这段文字是普通文本

我知道可以给单个单元格设置样式,但这不起作用,也无法找到任何可以为单元格提供预格式化富文本的方法。

我能想到的唯一可能的解决方案是分别创建两个单元格,然后将它们合并在一起,但那么格式是否会丢失?

在NPOI中是否有我忽略的实现此功能的方法?

5个回答

31
你可以试试这个:
        var font = reportWorkbook.CreateFont();
        font.FontHeightInPoints = 11;
        font.FontName = "Calibri";
        font.IsBold = true; 

        var cell = headerRow.CreateCell(0);
        cell.SetCellValue("Test Bold");
        cell.CellStyle = reportWorkbook.CreateCellStyle();
        cell.CellStyle.SetFont(font);

3
我已经使用这个将粗体文字应用于整个单元格,而不是一半/一半。 - Dragos Durlut
1
OP 询问关于富文本单元格的问题。您如何将此字体应用于单元格文本的一部分? - Edward Olamisan
Boldweight属性已过时,其功能现已由bool属性IsBold取代。 - dall

31

幸运的是,你可以做到这一点... 看看这段代码:

Font f1=wb.CreateFont();
f1.Color=HSSFColor.RED.index;
ws.GetRow(1).GetCell(0).RichStringCellValue.ApplyFont(1, 5, f1);

这个回答非常完美,非常有帮助。谢谢。 - cusman

7

看起来Ernie Banzon的答案不再完全按照描述工作,可能是由于命名空间的更改(或者事实上我正在使用HSSF命名空间?)

// usings
using NPOI.HSSF.UserModel;

// IWorkbook doc
IFont font = doc.CreateFont();
font.FontHeightInPoints = 11;
font.FontName = "Arial";
font.Boldweight = (short)FontBoldWeight.BOLD;

1
OP 询问关于富文本单元格的问题。您如何将此字体应用于单元格文本的一部分? - Edward Olamisan

2

使用此选项

 font.Boldweight = (short)700;//FontBoldWeight.Bold;

实际的语法应该像下面这样。但是有时候这两种语法都不起作用。

font.Boldweight = FontBoldWeight.Bold ;  
Or 
font.Boldweight = (short)FontBoldWeight.Bold; 

FontBoldWeight是枚举类型,类型转换后有时可能无法正常工作。如果您使用实际的短枚举值或者进行类型转换,就可以解决这个问题。下面是FontBoldWeight的声明,它将使事情更清晰明了。

**public enum FontBoldWeight
    {
              None = 0,
              Normal = 400,
              Bold = 700,
    }**

-1
经过相当的调查,似乎您无法在NPOI内执行此操作,因为它不提供必要的功能,允许您设置单元格内特定文本的格式,就像我尝试做的那样。

5
错误。 (您应该接受给定答案中的一个) - Slight
2
@Slight,这个回答已经近4年了。当时,即使使用了提出的解决方案,代码仍然不能按照我的需求工作。另外,我可以问一下,在对一个近4年的回答进行负投票的价值是什么吗? - Nathan
@Nathan,你能试试这个吗?https://dev59.com/c2025IYBdhLWcg3wkGx7#6911583 答案是在2011年8月创建的。 - Anton Norko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接