[NPOI2.0] 使用NPOI读取和导出Excel文件
先来说下一直使用的 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文件的更多相关文章
- 如何使用JavaScript实现纯前端读取和导出excel文件
js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls.xlsx.ods(一种OpenOffice专 ...
- 如何使用JavaScript实现纯前端读取和导出excel文件(转)
转自小茗同学博客:https://www.cnblogs.com/liuxianan/p/js-excel.html js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯 ...
- php读取和导出Excel文件
require 'vendor/PHPExcel/PHPExcel.php';require 'vendor/PHPExcel/PHPExcel/IOFactory.php'; public func ...
- jxl导出Excel文件
一.java项目实现读取Excel文件和导出Excel文件 实现读取和导出Excel文件的代码: package servlet; import java.io.FileInputStream; im ...
- NPOI复制模板导出Excel
本人菜鸟实习生一枚,公司给我安排了一个excel导出功能.要求如下:1.导出excel文件有样式要求:2.导出excel包含一个或多个工作表:3.功能做活(我的理解就是excel样式以后可能会变方便维 ...
- 使用NPOI或EPPlus来导出Excel文件实例,可在Excel文件加密
使用NPOI.dll组件来导出Excel文件,并设置样式,Nuget引用即可. packages\NPOI.2.1.3.1\lib\net20\NPOI.dll #region Excel prote ...
- 使用NPOI导出Excel文件
使用NPOI导出Excel文件,本实例使用了ASP.NET MVC. 1.使用NPOI导出Excel文件 实例:导出商品列表. 要求:1.通过NPOI导出导出商品列表信息: 2.使用Excel函数计算 ...
- WeihanLi.Npoi 根据模板导出Excel
WeihanLi.Npoi 根据模板导出Excel Intro 原来的导出方式比较适用于比较简单的导出,每一条数据在一行,数据列虽然自定义程度比较高,如果要一条数据对应多行就做不到了,于是就想支持根据 ...
- C#,使用NPOI,导出excel文件
/// <summary> /// 导出excel文件 /// </summary> /// <param name="dt">Table表数据 ...
随机推荐
- vultr vps新增reserved IPs功能,保留服务器原有IP
高性价比海外vps品牌vultr vps宣布一项新功能叫“reserved IPs”,顾名思义是帮助你保留服务器IP地址,以备后用. 这个需求是因为用户经常新建.删除一个vps服务器,默认分配的是随机 ...
- iOS UIBezierPath类 介绍
使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和 ...
- spring定时任务的几种实现方式
Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将 ...
- C++从函数返回指针
C++ 允许您从函数返回指针.为了做到这点,必须声明一个返回指针的函数,如下所示: int * myFunction() { . . . } 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局 ...
- react使用map生成的元素,key的设定不对导致每次删除都删除最后一个
假设 你的key设置为map中的索引,假设为0,1,2(原dom树),现在你用splice删除掉1,重新渲染时,还是会按map索引按顺序渲染为0,1(新dom树),由于react渲染机制是比较的key ...
- FD.io VPP 技术Neutron VNF vRouter 实现
在OpenStack Neutron中主要有三种网络设备,路由器(Router),负载均衡器(LB)以及VPN,其中Router作为基础网络设备起到连接子网到子网.内网到外网的作用.不同子网之间的访问 ...
- A Truthful (1-ɛ)-Optimal Mechanism for On-demand Cloud Resource Provisioning---INFOCOM 2015
[标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption future work [相关方法或论文] [重点提示] [其它]
- 移动端ios电话号码
<meta name="format-detection" content="telephone=no"> <meta http-equiv= ...
- dao代码模板
提供数据源以及回收资源的工具类DbUtils: public class DbUtils { private static ComboPooledDataSource dataSource = new ...
- jquery学习笔记2——jq效果
一.显示隐藏: 可以使用show()和hide()方法来显示隐藏: $("#hide").click(function(){ $("p").hide(); }) ...