`

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

阅读更多

(我文笔太烂,就当练手了)

 

NPOI 版本信息:

Binary: 2.1.3.1

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

 

最近想改善某个项目中操作 Excel 文件的性能,于是重新开始研究 NPOI。

 

  • 为什么是“重新”?

以前试用过 NPOI,实现过一些很基础的功能,但因为某些原因,一直用 Microsoft.Office.Interop.Excel。

 

  • 为什么是“研究”?

因为 NPOI 的很多功能都有待实现/改善,帮助文档也不完善。甚至为了实现某些功能,不得不花点时间去翻一翻 NPOI 的源码。

github 上的例子很有用,可以少走很多弯路。

 

 

本期问题:Sheet Tab Color

 

> 接口 NPOI.SS.UserModel.ISheet 中定义了相关属性:

 

short TabColorIndex { get; set; }

> 但是,XSSFSheet (.xlsx 文件中的 Sheet)中还未实现 :

 

public short TabColorIndex
{
    get
    {
        throw new NotImplementedException();
    }
    set
    {
        throw new NotImplementedException();
    }
}

不过,XSSFSheet 中有一个方法可以设置 Tab Color:

 

 

public void SetTabColor(int colorIndex)

但是没有方法获取 Tab Color。

为什么不把 SetTabColor 这个方法放到 TabColorIndex 里?难道这个方法性能还不够格,不适合作为属性?

 

> HSSFSheet (.xls 文件中的 Sheet)实现了属性 TabColorIndex。

看上去一切正常。

 

但是如果 Sheet 是从已有的文件载入的,且 Sheet 的 Tab Color 从未设置过,那就接好 NullReferenceException 吧。

 

因为,Tab Color 的信息存放在 HSSFSheet -> _sheet (NPOI.HSSF.Model.InternalSheet) -> sheetext (NPOI.HSSF.Record.SheetExtRecord) 中。NPOI 在载入 HSSFSheet 时,如果 Tab Color 从未设置过,就不会去创建 sheetext,sheetext 一直是 null。

当然也可以通过反射,先创建一个 SheetExtRecord 实例,赋给 sheetext,再将 sheetext 插入到 _sheet 的 Records 里。

一般插入位置是倒数第2个。最后一个 record 项存的应该是 EOF,表示文件末尾。如果插入到其它位置,可能会导致无法生效,甚至在 Microsoft Office Excel 中打开时发出警告。

 

如果 Sheet 最初是通过 NPOI 创建的(IWorkbook.CreateSheet),那么 NPOI 会自动创建 sheetext,并且保存到文件时会把 sheetext 的信息一并写入,下次载入该 Sheet,sheetext 就不会是 null。

  • 大小: 1.7 KB
分享到:
评论

相关推荐

    .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文档进行读写操作。

    .net NPOI导出EXCEL多个sheet

    以下将详细介绍如何使用NPOI在.NET中导出包含多个sheet的Excel文件。 首先,我们需要了解NPOI的基本用法。NPOI主要通过两个主要的类来处理Excel:HSSFWorkbook用于处理Excel 2003及之前的版本(.xls格式),而...

    C# NPOI导出多个Sheet页的Excel

    C# 用NPOI导出多个sheet页的Excel,sheet页名称可以自定义

    NPOI_Sheet_Test

    在这个名为"NPOI_Sheet_Test"的项目中,我们将探讨如何使用NPOI来隐藏工作簿中的特定sheet,从而实现类似于移除sheet的功能,但同时又不永久删除数据。 首先,让我们了解NPOI的基本结构。NPOI的主要类包括`...

    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-import-and-export-Excel.rar_C# EXCEL npoi_C# npoi_excel_imp

    比如,可以使用内存映射文件(Memory-Mapped Files)来减少内存占用,或者在写入大量数据时使用`Sheet.CreateFreezePane`来冻结表头,提高用户体验。 6. **B/S架构中的应用**: 在B/S架构中,通常需要将Excel作为...

    npoi.2.4.1-C#.rar

    3. **性能优化**:NPOI设计时考虑了性能,尤其是在处理大型Excel文件时。它允许流式读写,避免一次性加载整个文件到内存,减少了内存消耗。 4. **数据导出**:在企业级应用中,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-2.4-稳定版.rar

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

    使用NPOI操作制作word

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

    NPOI使用手册.doc

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

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

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

    asp.net使用npoi读取excel模板并导出下载详解

    在传统的服务器端操作Excel文件时,常见的问题包括需要安装和维护Office软件、Excel会自动更改数据类型、字段开头使用特殊符号(如“-”或“=”)会被误认为公式、以及导出时可能引发进程相关的问题等。NPOI库的使用...

    Excel-数据分类导出至多个Sheet NPOI.dll

    标题中的“Excel-数据分类导出至多个Sheet NPOI.dll”表明这是一个关于使用NPOI库来操作Excel文件,特别是将数据按照类别分到不同的工作表(Sheet)中的技术主题。NPOI是一个开源的.NET库,它允许开发者读写...

    NPOI.dll(C#版本)

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

    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的主要区别在于功能增强、性能...

    NPOI使用文档

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

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

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

Global site tag (gtag.js) - Google Analytics