`

我在使用 NPOI 时遇到的问题 - Color

阅读更多

NPOI 版本信息:

Binary: 2.1.3.1

Source Code: https://github.com/tonyqus/npoi (2015-06-15)

本期问题:Color

1. Custom Color / Color Palette / Color List

> NPOI(HSSF)中,一般设置颜色都会赋一个 Int16 (表示颜色的索引)。

 

style1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Blue.Index;

但是有时候需要的颜色并没有在 HSSFColor 中定义。这时候就需要设置自定义的颜色。

一般是先将自定义的颜色(RGB值)添加到 Workbook 的调色板(HSSFPalette)中。然后将该新颜色的 Index 赋给目标属性。(具体示例可参照 Github 上的官方示例代码)

 

<2015-11-17>

  • 调色板(NPOI.HSSF.UserModel.HSSFPalette)的大小是56(最多只能放56种颜色);
  • b. 从常见的 Excel 文件导入的 Workbook 中,调色板的56个坑位都已占满;
  • c. NPOI 新建调色板时,默认会加入56种颜色;

所以一般往调色板添加颜色都会失败(没坑位了),只能把其中的一种颜色替换成所需的颜色。替换颜色会导致某些预定义颜色和其默认索引在调色板中表示的颜色不同。所以一般比较保守的设置颜色做法是:

  1. 用 RGB 值查找调色板中是否存在相应的颜色。如果存在该颜色,使用该颜色在调色板中的索引(完成);如果不存在,到 2。
  2. 用所需颜色替换调色板中某种颜色,然后使用该新颜色的索引。把那种颜色替换掉呢?如果有其它地方引用到了被替换的颜色,这个地方的颜色也会被改成新颜色。同理,后续的操作也可能会替换现在的新颜色。很麻烦啊,未来的事情是无法预料的,无解了。大家换到 xlsx 吧。

</2015-11-17>

 

public class HSSFPalette
{
    //...
    public HSSFColor AddColor(byte red, byte green, byte blue);
    public void SetColorAtIndex(short index, byte red, byte green, byte blue);
    //...
}

 

> XSSF 中一般可以直接实例化一个自定义的 XSSFColor,并将其赋给相应属性。

<2015-11-17>

由于 NPOI 不够完善,有时候在 XSSF 中不得不用 Color Index 来设置颜色(如:设置 Sheet Tab Color)。

这时候一般做法就是:

  1. 获取 StylesTable;(XSSFWorkbook.GetStylesSource())
  2. 获取 CT_Stylesheet;(StylesTable.GetCTStylesheet(); 该方法为 internal,需要用到反射
  3. 获取颜色列表;(CT_Stylesheet.colors.indexedColors)
  4. 如果颜色列表中存在所需颜色,使用其相应的索引;如果不存在,则添加该颜色到列表中,使用该新颜色在列表中的索引。

</2015-11-17>

 

 

2. Colors by Name (System.Drawing.Color vs NPOI.SS.UserModel.IndexedColors)

NPOI.SS.UserModel.IndexedColors 内部其实就是 HSSFColor。

System.Drawing.Color NPOI.SS.UserModel.IndexedColors 内部都定义了一些具体的颜色(Red,Green,Blue等)。

 

但是有部分颜色名称相同,RGB值却不同

如:LightGreen。

System.Drawing.Color 中 LightGreen 的 RGB 值是 (144,238,144)。

NPOI.SS.UserModel.IndexedColors 中的 LightGreen 的 RGB 值是 (204,255,204)。

System.Drawing.Color 中的预定义颜色遵循 CSS Color Module Level 3

分享到:
评论

相关推荐

    .NET Core使用NPOI导出复杂Word-NPOI-Export-Word-master.zip

    首先看了下GItHub中的源码有一个简单Word导出的示例,然后在看了网上有很多关于NPOI导出Word文档的案例,发现一个特点网上的好像都差不多,对于我而言网上的这些案例完全能够实现我的这个功能,但是感觉看了网上这些...

    Npoi生成Excel 97-2003/ (xls)文件

    NPOI 是 POI 项目的 .NET... 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。

    NPOI 2.5.1.0_new.zip

    NPOI 2.5.1.0版本,为目前最新版本 亲测可用! NPOI 是 POI 项目的 .NET 版本。POI是一个开源的C#,JAVA读写Excel、WORD等...使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。

    NPOI-2.4-稳定版.rar

    NPOI-2.4-稳定版

    NPOI.rar_-baijiahao_NPOI word_npoi _npoi帮助文档_npoi教程

    NPOI帮助文档(1.2.3版),是一个好用的Word操作控件的使用教程。

    npoi-master-excel操作例程

    What's NPOI This project is the .NET version of POI Java project at http://poi.apache.org/. POI is an open source project which can help you read/write xls, doc, ppt files. It has a wide application. ...

    C#使用npoi操作office案例

    C#使用npoi操作office案例C#使用npoi操作office案例C#使用npoi操作office案例C#使用npoi操作office案例C#使用npoi操作office案例C#使用npoi操作office案例

    c# 基于NPOI对excel操作-附件资源

    c# 基于NPOI对excel操作-附件资源

    NPOI代码使用-C#

    处理Excel表格导出,字符处理,单元格处理,行距处理,让导出来的Excel表格看着舒心,很简单的操作就可以

    使用NPOI库操作WORD模板文件。

    使用NPOI库操作WORD模板文件。 C# 使用NPOI 生成WORD模板文件,只支持DOCX格式。 可以用于自动生成各种格式文档。支持图片,支持签名。 有问题可以联系我

    C#使用NPOI导入Excel的方法详解

    本文实例讲述了C#使用NPOI导入Excel的方法。分享给大家供大家参考,具体如下: NPOI是由国人开发的一个进行excel操作的第三方库。百度百科介绍如下:NPOI 本文主要介绍如何使用NPOI将Excel数据读取。 首先引入程序集...

    NPOI使用文档

    一些博客园内关于NPOI使用的文章 1.Npoi 使用总结 回顾 反思 - baidixing - 博客园 2.NPOI 菜鸟实践行之根据指定的模板生成Excel 2003格式的文件 (一) 3.杨新华 【原创】WinForm操作EXCEL(第三方插件NPOI) 4....

    NPOI-import-and-export-Excel.rar_C# EXCEL npoi_C# npoi_excel_imp

    利用利用NPOI 简单操作 Excel 通用于 c/s和b/s 架构的程序 (半原创)

    Labview读写Excel,使用C#封装NPOI

    Labview使用ActiveX操作Excel效率低下而且复杂,而且PC端必须安装Office... 使用NPOI插件效率高,无需安装Office,操作方便 使用C#封装调用方便,满足简单的读写操作

    NPOI 中文使用开发参考手册.doc

    NPOI 中文使用开发参考手册 NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ...

    使用NPOI操作制作word

    使用NPOI动态链接库,操作生成word,包括生成段落。添加文字,添加页眉。插入图片,插入柱形图,表格等

    NPOI-CSDN下载

    NPOI VERSION-2.3.0.0 C# 用于Excel数据导出功能开发

    npoi-79962.zip

    npoi-79962.zip

    c#/vs使用npoi对excel进行简单的操作

    npoi是poi的.net版本,是一个开源的库,可以我们对execl进行一个简单的使用,在这个文件中,我已经实现了对于npoi简单的使用的一些方法的封装,由于我也是近期才有这个需求,可能代码比较稚嫩,但是对于创建excel,...

    WinForm使用NPOI-NET.2.0-导入导出+示例.zip

    主要用于Win7系统或XP系统使用一些单机版WinForm程序 使用NPOI不用刻意的去装office软件导出 可以借鉴一下

Global site tag (gtag.js) - Google Analytics