c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多
今天下午开始整理excel这块, 微软弄的那些库简直是个坑, 什么com注册之类的净是些报错.
在网上搜资料偶然碰见npoi ,好东西,值得使用
using System; using System.Data; using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.HSSF.UserModel;namespace MakeData {public class ReadExcelHelper{/// <summary>/// 将excel导入到datatable/// </summary>/// <param name="filePath">excel路径</param>/// <param name="isColumnName">第一行是否是列名</param>/// <returns>返回datatable</returns>public static DataTable ExcelToDataTable(string filePath, bool isColumnName){DataTable dataTable = null;FileStream fs = null;DataColumn column = null;DataRow dataRow = null;IWorkbook workbook = null;ISheet sheet = null;IRow row = null;ICell cell = null;int startRow = 0;try{using (fs = File.OpenRead(filePath)){// 2007版本if (filePath.IndexOf(".xlsx") > 0)workbook = new XSSFWorkbook(fs);// 2003版本else if (filePath.IndexOf(".xls") > 0)workbook = new HSSFWorkbook(fs);if (workbook != null){sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheetdataTable = new DataTable();if (sheet != null){int rowCount = sheet.LastRowNum;//总行数if (rowCount > 0){IRow firstRow = sheet.GetRow(0);//第一行int cellCount = firstRow.LastCellNum;//列数//构建datatable的列if (isColumnName){startRow = 1;//如果第一行是列名,则从第二行开始读取for (int i = firstRow.FirstCellNum; i < cellCount; ++i){cell = firstRow.GetCell(i);if (cell != null){if (cell.StringCellValue != null){column = new DataColumn(cell.StringCellValue);dataTable.Columns.Add(column);}}}}else{for (int i = firstRow.FirstCellNum; i < cellCount; ++i){column = new DataColumn("column" + (i + 1));dataTable.Columns.Add(column);}}//填充行for (int i = startRow; i <= rowCount; ++i){row = sheet.GetRow(i);if (row == null) continue;dataRow = dataTable.NewRow();for (int j = row.FirstCellNum; j < cellCount; ++j){cell = row.GetCell(j);if (cell == null){dataRow[j] = "";}else{//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)switch (cell.CellType){case CellType.Blank:dataRow[j] = "";break;case CellType.Numeric:short format = cell.CellStyle.DataFormat;//对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理if (format == 14 || format == 31 || format == 57 || format == 58)dataRow[j] = cell.DateCellValue;elsedataRow[j] = cell.NumericCellValue;break;case CellType.String:dataRow[j] = cell.StringCellValue;break;}}}dataTable.Rows.Add(dataRow);}}}}}return dataTable;}catch (Exception ex){string mess = ex.Message;if (fs != null){fs.Close();}return null;}}} }
转载于:https://www.cnblogs.com/zuochanzi/p/9058568.html
c#NPOI读取excel 比interop和Microsoft.Jet.OLEDB.4.0 之类 的好的多相关推荐
- “Microsoft.Jet.OLEDB.4.0” 解决方法
方法一. 1.命令行键入: cscript.exe %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32 ...
- Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别
Jet 引擎,可以访问 Office 97-2003,但不能访问 Office 2007. ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可 ...
- Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的适用版本
Jet 可以访问 Office 97-2003,但不能访问 Office 2007. ACE 既可以访问 Office 2007,也可以访问 Office 97-2003. 另外:Microsof ...
- asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册Microsoft.Jet.OLEDB.4.0 提供程序...
笔者在项目中做做了一个从Excel表格中导入数据的模块.大体上asp.net项目中导入Excel大体分成三类: 1)采用c#内置方案System.Data.OleDb(限制较小, 通用) 2)采用Ex ...
- 连接Excel文件时,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
问题与解决 未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"提供程序 错误. 1 string strCon = " Provider = Micr ...
- Excel导入数据,未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
Excel导入数据,未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"提供程序: .NET在导入Excel时,使用了一个Microsoft.Jet.OLEDB. ...
- The 'Microsoft Jet OLEDB 4.0 Provider' is not registered on the local machine
在一台Win7 64位的操纵系统上部署的C# Web系统,操作Excel,批量导入数据,报错,提示错误信息: The 'Microsoft Jet OLEDB 4.0 Provider' is not ...
- 调用Microsoft.Jet.OLEDB.4.0需要MDAC2.7支持
asp.net进行Excel导入时需要调用Microsoft.Jet.OLEDB.4.0 strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data S ...
- 无法初始化链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Jet.OLEDB.4.0 的数据源对象。
SQL Server 与 Excel之间导数据时候执行SQL遇到问题 执行如下SQL语句 select * from openrowset('Microsoft.Jet.OLEDB.4.0', 'Ex ...
最新文章
- xBIM 实战01 在浏览器中加载IFC模型文件
- MyBatis源码- SqlSession门面模式 selectList 源码解析
- 【Qt】2D绘图之涂鸦板
- UnpooledHeadByteBuf源码分析
- 5.1.2全景声音箱摆位_全景声音响系统音箱应该如何摆位(5.1.2、5.1.4篇)
- 苹果测试集了成语音识别和人脸识别的智能家居?
- 使用socket方式连接Nginx优化php-fpm性能
- transition的合理运用
- 试验设计第二版茆诗松课后题答案_试验设计习题及答案
- 直流可逆调速控制系统matlab,逻辑无环流直流可逆调速系统的Matlab仿真
- mac 安装ffmpeg以及各种编码器
- iOS平台上aa(见缝插针)游戏的简易实现
- arcgis坐标转换
- 计算机网络软件系统不包括,1period;计算机软件系统一般分为lpar; A rpar;两大部分...
- python中compile函数
- 如何在eclipse配置服务器server (java ee)
- 数电课程设计——电子钟
- 通灵学院|游戏设计研习8:游戏空间设计★(800字)
- 8.2. Monetary Types
- 爱迪尔门锁系统怎么连接服务器,爱迪尔门锁设置方法是什么?