`

我在使用 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文档进行读写操作。

    C# NPOI导出多个Sheet页的Excel

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

    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_Sheet_Test

    使用NPOI对不需要的sheet进行隐藏操作,达到类似移除sheet的效果。

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

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

    NPOI-2.4-稳定版.rar

    NPOI-2.4-稳定版

    .net NPOI导出EXCEL多个sheet

    .net NPOI导出EXCEL多个sheet

    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使用文档

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

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

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

    C#使用npoi操作office案例

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

    NPOI代码使用-C#

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics