`

我在使用 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.rar_-baijiahao_NPOI word_npoi _npoi帮助文档_npoi教程

    在“NPOI.rar”压缩包中,包含了一个名为“NPOI帮助文档(1.2.3版).chm”的文件,这是一份详细介绍了NPOI 1.2.3版本的使用教程。CHM是Microsoft编写的HTML帮助文件,可以方便地查看和搜索相关知识。 NPOI的核心功能...

    Unity文档操作使用的NPOI库文件

    在Unity中,虽然它是基于.NET Framework的,但通过IL2CPP或者Unity的.NET 4.x兼容性设置,我们可以在Unity项目中使用NPOI。 标题中提到的"Unity文档操作使用的NPOI库文件",意味着我们要在Unity中集成NPOI库,用于...

    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. ...

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

    在使用NPOI过程中,可能会遇到各种异常,如文件不存在、格式不正确、内存不足等。需要适当地捕获和处理这些异常,确保程序的健壮性。 总结,NPOI是一个强大且易用的C#库,适用于处理Excel文件。无论是在C/S架构的...

    使用NPOI操作制作word

    使用NPOI操作制作word NPOI是一个流行的开源库,允许开发人员在.NET平台下生成和操作Office文档。下面我们将详细介绍如何使用NPOI操作生成word文档,包括生成段落、添加文字、添加页眉、插入图片、插入柱形图和表格...

    NPOI-2.4-稳定版.rar

    9. **安全考虑**:NPOI处理的文件可能包含敏感数据,因此在使用时需要注意数据保护和安全编程实践,防止潜在的安全风险。 总的来说,NPOI是一个强大的工具,为.NET开发者提供了便捷的接口来处理Office文件,尤其在...

    npoi.2.4.1-C#.rar

    3. **性能优化**:NPOI设计时考虑了性能,尤其是在处理大型Excel文件时。它允许流式读写,避免一次性加载整个文件到内存,减少了内存消耗。 4. **数据导出**:在企业级应用中,NPOI常用于数据导出,如将数据库中的...

    NPOI.dll(C#版本)

    在实际使用NPOI.dll时,开发者需要引用这个库,然后通过调用其提供的类和方法来实现所需功能。例如,`HSSFWorkbook`代表一个Excel工作簿,`HSSFSheet`表示工作簿中的工作表,`HSSFRow`和`HSSFCell`则分别对应工作表...

    NPOI使用手册.doc

    NPOI采用Apache 2.0许可证,这使得它在商业和非商业项目中都能自由使用,无需担心源代码开放的问题。这对于那些需要在业务系统开发中集成Excel功能的公司来说,是一个极具吸引力的选择。 ### 1. 了解NPOI 1.1 什么...

    npoi使用示例.rar

    3. **问题(issues)**:这部分可能包含了用户在使用NPOI时遇到的问题和解决方案,对于初学者来说,这是一个宝贵的参考资料,可以从中学习到常见问题的处理方法。 4. **许可证(license)**:NPOI是一个开源项目,...

    NPOI-1.2.4-(2.0and4.0)DLL.rar_NPOI dll_NPOI.dll 2.4_npoi 2.0_npo

    标题提到的"NPOI-1.2.4-(2.0and4.0)DLL.rar"是一个包含不同版本NPOI DLL文件的压缩包,其中".net 4.0"和".net 2.0"分别对应于.NET Framework 4.0和2.0版本的库。 NPOI 2.0和NPOI 4.0的主要区别在于功能增强、性能...

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

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

    C#使用npoi操作office案例

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

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

    在这个场景中,"WinForm使用NPOI-NET.2.0-导入导出+示例.zip" 提供了一个解决方案,允许开发者在不安装Microsoft Office的情况下,通过C#语言在WinForm应用中实现Excel文件的导入和导出功能。NPOI是一个开源库,专门...

    NPOI-2.1.1版本DLL包

    这个“NPOI-2.1.1版本DLL包”包含了针对C#编程语言编译好的NPOI库,使得开发者能够方便地在他们的应用程序中集成Excel文件的读写功能。 NPOI的核心功能在于其对HSSF(Horizontally Stored File Format)和XSSF(XML...

    NPOI使用手册 试用说明 操作教程 最新版

    - CSDN和微软社区也是获取NPOI相关问题解答和技术讨论的重要平台。 通过深入学习和实践NPOI,你可以轻松地在.NET项目中实现对Excel文件的高级操作,提升工作效率,为你的业务需求提供强大支持。

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

    NPOI支持.NET框架,这使得我们可以使用C#语言来创建一个中间层,将NPOI的功能封装起来,然后在Labview中通过.NET函数调用这些封装好的方法。 以下是使用C#封装NPOI的基本步骤: 1. **引入NPOI库**:在C#项目中,...

    NPOI2.3.0 包含官网下载npoi.2.3.0.nupkg文件及生成的响应dll文件以及说明文档

    在早期版本中,某些用户可能会遇到在VS2012环境下使用NPOI时出现的编译或运行错误。NPOI2.3.0修复了这些兼容性问题,确保在.NET 4.5框架下能正常工作,无需担心版本冲突。 3. **新功能**: - 没有具体列出新功能...

Global site tag (gtag.js) - Google Analytics