用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);



        }

    }

}

 

效果截图:

image

你可能感兴趣的:(String)