用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

posted @ 2012-07-01 01:33  Ken Yang  阅读(2183)  评论(0编辑  收藏  举报