先来说下一直使用的 Microsoft.Office.Interop.Excel ,在系统正式使用时遇到的问题

1:Excel读取数据BUG

由于使用Microsoft.Office.Interop.Excel 出现读取数据的Bug,导致经常要为此问题浪费时间去向客户解释原因和指导客户如何处理Excel文档来适应读取的Bug问题。

2:客户环境部署

客户环境(多为工厂机器)没有安装 Mircosoft Office(600M以上)或 AccessDatabaseEngine(20M左右),部署时候需要至少5分钟进行读取Excel引擎的安装。

3:解决了 32位、64位 "未在本机上注册Mircosoft.ACE.OLEDB 1X.0" 的系统所安装Excel的版本问题

由于客户环境各不相同,有64位系统,但安装 32位的 Office 软件;亦有64位系统,安装 64位系统的 Office软件;

使用NPOI可以解决以上3个问题。

=========================

以下我列出 在NPOI中遇到的难点,

其他的代码 我会发出整个项目到百度云盘 : http://pan.baidu.com/s/1mgwxexM

一、NPOI 基本类

IWorkbook -- 一般读取什么文件就使用下列哪种类
|__ HSSFWorkbook -- 对应于 XLS
|__ XSSFWorkbook -- 对应于 XLSX

ICell -- 单元格基本使用次类,本人暂未使用下面细分的2种单元格

|__ HSSFCell -- XLS

|__ XSSFCell -- XLSX

二、NPOI对于读取 数值 或 日期

由于NPOI对读取单元格中日期(时间)和数值都使用了 CellType.Numeric,故在对日期(时间)的读取本人加上了以下的判断。

 private static object GetValueType(ICell cell)
{
if (cell == null)
{
return null;
} switch (cell.CellType)
{
case CellType.Blank:
return null;
case CellType.Boolean:
return cell.BooleanCellValue;
case CellType.String:
return cell.StringCellValue;
case CellType.Error:
return cell.ErrorCellValue;
case CellType.Formula:
return cell.NumericCellValue;
//return cell.CellFormula; // 少数情况下 会直接读取公式 case CellType.Numeric: // 缺点 NPOI对日期处理比较薄弱
{
short format = cell.CellStyle.DataFormat;
if ( // TODO : 继续研究下获取日期 or 数值 !!
// 可能不同文件自定义不同
format == || // 日期 yyyy-m-d
format == || // 自定义 yyyy-m-d h:mm
format == ||
format == ||
format == ||
format == || // 自定义 yyyy年y月d日
format == // 自定义 yyyy-mm-dd hh:mm:ss
)
{ return cell.DateCellValue; }
else { return cell.NumericCellValue; }
}
default:
return "=" + cell.CellFormula;
}
}

[NPOI2.0] 使用NPOI读取和导出Excel文件的更多相关文章

  1. 如何使用JavaScript实现纯前端读取和导出excel文件

    js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls.xlsx.ods(一种OpenOffice专 ...

  2. 如何使用JavaScript实现纯前端读取和导出excel文件(转)

    转自小茗同学博客:https://www.cnblogs.com/liuxianan/p/js-excel.html js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯 ...

  3. php读取和导出Excel文件

    require 'vendor/PHPExcel/PHPExcel.php';require 'vendor/PHPExcel/PHPExcel/IOFactory.php'; public func ...

  4. jxl导出Excel文件

    一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; im ...

  5. NPOI复制模板导出Excel

    本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...

  6. 使用NPOI或EPPlus来导出Excel文件实例,可在Excel文件加密

    使用NPOI.dll组件来导出Excel文件,并设置样式,Nuget引用即可. packages\NPOI.2.1.3.1\lib\net20\NPOI.dll #region Excel prote ...

  7. 使用NPOI导出Excel文件

    使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...

  8. WeihanLi.Npoi 根据模板导出Excel

    WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据 ...

  9. C#,使用NPOI,导出excel文件

    /// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...

随机推荐

  1. ACM-ICPC之路

    自从了解到了ACM,我就坚定了参加这个比赛的信心.虽然零基础开始,但是阻挡不了我的前进之路.从大一上学期的完成二十道题,到假期完成四十道题:从第一次校赛不了解退出循环方式只完成了一道题,到大一预选赛第 ...

  2. Python基础(十三)-进程&线程

    进程 定义:进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的基本单位 线程

  3. 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解

    1. http://bbs.wuyou.com/forum.php?mod=viewthread&tid=303679&fromuid=396698

  4. CSS-负边距原理

    一.负边距原理 正边距以相邻模块的位置为参考点进行移动,并对周围模块进行合理地排挤. 负边距即margin的四个边界值为负值. 在html中使用负边距margin-left和margin-top相当于 ...

  5. readline与readlines不能同时使用

    fd = open("C:\Users\william\Desktop\dup_file - Copy (2).txt")for i in xrange(0,len(fd.read ...

  6. 2015 asia xian regional F Color (容斥 + 组合数学)

    2015 asia xian regional F Color (容斥 + 组合数学) 题目链接http://codeforces.com/gym/100548/attachments Descrip ...

  7. java运行时数据区域

    数据区域有:程序计步器,虚拟机栈,本地方法栈,java堆,方法区 程序计步器: 它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器. 每一条JVM线程都有自己的PC寄存器,各 ...

  8. C#学习单向链表和接口 IList<T>

    C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...

  9. kafka_2.11-0.10.0.0安装步骤

    Kafka安装配置 我们使用5台机器搭建Kafka集群: 1. cluster-1-namenode-1-001       172.16.0.147 2. cluster-1-datanode-1- ...

  10. ManyToMany OrderBy

    有A.B表和A_B中间表,A_B中间表只有A.B表的id,想让A中的bs以date列排序: @Entity @Table(name="A") public class A impl ...