用NPOI生成包含富文本字符串(Rich Text String)的单元格(2) - 设置上标和下标
作者: 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); } } }
效果截图: