作者: Ken Yang
在上一篇博文中讲到如何用NPOI生成包含富文本字符串的单元格。后来,有网友问到如何设置上标和下标,这是通过设置 HSSFFont.TypeOffset属性(short类型)来实现。个人认为TypeOffset这个名字不直观,不熟悉的程序员不会将它联想到上标和下标。 TypeOffset属性值0表示没有设置上标或下标;属性值1表示上标,属性值2 表示下标。NPOI.HSSF.Record.FontRecord 类中定义了3个公共静态变量 SS_NONE, SS_SUPER, SS_SUB 分别对应这三种类型。
代码如下:
using System;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.HSSF.Util;
using NPOI.POIFS.FileSystem;
using NPOI.SS.UserModel;
namespace NPOI_RichFormatString
{
class Program
{
static void Main(string[] args)
{
HSSFWorkbook workbook = new HSSFWorkbook();
DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company = "Company Name";
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
si.Author = "Ken Yang";
si.Subject = "Generating Rich Text String using NPOI";
workbook.DocumentSummaryInformation = dsi;
workbook.SummaryInformation = si;
Sheet ws = workbook.CreateSheet("sheet1");
//设置富文本字符串
HSSFRichTextString rts1, rts2;
rts1 = new HSSFRichTextString("百事可乐®");
rts2 = new HSSFRichTextString("X1 + X2 = 10");
HSSFFont superscript = (HSSFFont)workbook.CreateFont();
superscript.TypeOffset = NPOI.HSSF.Record.FontRecord.SS_SUPER;//上标
superscript.Color = HSSFColor.RED.index;
HSSFFont subscript = (HSSFFont)workbook.CreateFont();
subscript.TypeOffset = NPOI.HSSF.Record.FontRecord.SS_SUB; //下标
subscript.Color = HSSFColor.RED.index;
HSSFFont normalFont = (HSSFFont)workbook.CreateFont();
// ApplyFont的第一个参数指定子字符串的起始位置(0-based),第二个参数指定子字符串的结束位置(不包括该位置的字符)。
// 例如:如下这句设置第5个字符的字体。
// 第三个参数指定字体。
rts1.ApplyFont(4, 5, superscript);
rts2.ApplyFont(1, 2, subscript);
rts2.ApplyFont(6, 7, subscript);
ws.CreateRow(0).CreateCell(0).SetCellValue(rts1);
ws.CreateRow(1).CreateCell(0).SetCellValue(rts2);
FileStream file = new FileStream(@"e:\test.xls", FileMode.Create);
workbook.Write(file);
}
}
}
效果截图: