首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

NPOI 自定义设立单元格背景颜色[RGB格式]

2013-01-23 
NPOI 自定义设置单元格背景颜色[RGB格式]一.背景介绍NPOI自带的颜色有时不能满足我们要求时,我们需要自己

NPOI 自定义设置单元格背景颜色[RGB格式]

一.背景介绍   

                NPOI自带的颜色有时不能满足我们要求时,我们需要自己定义背景色,而且NPOI的颜色类型是short类型,而.Net颜色类是Color类型,怎么让它们相互之间转换呢?网上有一段代码是vb的可以解决上述问题,本人把它翻译成C#的,方便大家使用

 

VB:

Private Function GetXLColour(ByVal SystemColour As System.Drawing.Color) As Short            'Lookup RGB from .NET system colour in Excel pallete - or create a new entry (get nearest if palette full). Return the XL palette index.            Dim XlPalette As HSSFPalette = xlWorkbook.GetCustomPalette()            Dim XlColour As NPOI.HSSF.Util.HSSFColor = XlPalette.FindColor(SystemColour.R, SystemColour.G, SystemColour.B)            If IsNothing(XlColour) Then                'Available colour palette entries: 65 to 32766 (0-64=standard palette; 64=auto, 32767=unspecified)                If NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE < 255 Then                    If NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE < 64 Then NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE = 64                    NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE += 1                    XlColour = XlPalette.AddColor(SystemColour.R, SystemColour.G, SystemColour.B)                Else                    XlColour = XlPalette.FindSimilarColor(SystemColour.R, SystemColour.G, SystemColour.B)                End If                Return XlColour.GetIndex()            Else                Return XlColour.GetIndex()            End If        End Function

 

C#:

private short GetXLColour(HSSFWorkbook workbook, System.Drawing.Color SystemColour)    {        short s = 0;        HSSFPalette XlPalette = workbook.GetCustomPalette();        HSSFColor XlColour = XlPalette.FindColor(SystemColour.R, SystemColour.G, SystemColour.B);        if (XlColour == null)        {            if (NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE < 255)            {                if (NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE < 64)                {                    NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE = 64;                    NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE += 1;                    XlColour = XlPalette.AddColor(SystemColour.R, SystemColour.G, SystemColour.B);                }                else                {                    XlColour = XlPalette.FindSimilarColor(SystemColour.R, SystemColour.G, SystemColour.B);                }                s= XlColour.GetIndex();            }        }        else            s= XlColour.GetIndex();        return s;    }


 

使用方法:

 

         Color LevelOneColor = Color.FromArgb(143, 176, 229);       Color LevelTwoColor = Color.FromArgb(201, 217, 243);       Color LevelThreeColor = Color.FromArgb(231, 238, 248);       Color LevelFourColor = Color.FromArgb(232, 230, 231);       Color LevelFiveColor = Color.FromArgb(250, 252, 213);        /// <summary>        /// 分层设置单元格样式        /// </summary>        /// <param name="workbook"></param>        /// <param name="alignment"></param>        /// <param name="valingment"></param>        /// <returns></returns>        public HSSFCellStyle SetStyle(HSSFWorkbook workbook, short alignment, short valingment, int layer)        {            HSSFCellStyle style = workbook.CreateCellStyle();            style.Alignment = alignment;            style.VerticalAlignment = valingment;            style.BorderBottom = HSSFCellStyle.BORDER_THIN;            style.BorderLeft = HSSFCellStyle.BORDER_THIN;            style.BorderRight = HSSFCellStyle.BORDER_THIN;            style.BorderTop = HSSFCellStyle.BORDER_THIN;            switch (layer)            {                case 0:                    style.FillForegroundColor = GetXLColour(workbook, LevelOneColor); //调用GetXLColour方法                    style.FillPattern = HSSFCellStyle.ALT_BARS;                    style.FillBackgroundColor = GetXLColour(workbook, LevelOneColor);                    break;                case 1:                    style.FillForegroundColor = GetXLColour(workbook, LevelTwoColor);                    style.FillPattern = HSSFCellStyle.ALT_BARS;                    style.FillBackgroundColor = GetXLColour(workbook, LevelTwoColor);                    break;                case 2:                    style.FillForegroundColor = GetXLColour(workbook, LevelThreeColor);                    style.FillPattern = HSSFCellStyle.ALT_BARS;                    style.FillBackgroundColor = GetXLColour(workbook, LevelThreeColor);                    break;                case 3:                    style.FillForegroundColor = GetXLColour(workbook, LevelFourColor);                    style.FillPattern = HSSFCellStyle.ALT_BARS;                    style.FillBackgroundColor = GetXLColour(workbook, LevelFourColor);                    break;                case 4:                    style.FillForegroundColor = GetXLColour(workbook, LevelFiveColor);                    style.FillPattern = HSSFCellStyle.ALT_BARS;                    style.FillBackgroundColor = GetXLColour(workbook, LevelFiveColor);                    break;                default:                    break;            }            return style;        }


 

热点排行