c#用NPOI将excel文件内容读取到datatable数据表中

将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel
1.第一种是根据excel文件路径读取excel并返回datatable
 1         /// <summary>
 2         /// 将excel文件内容读取到DataTable数据表中
 3         /// </summary>
 4         /// <param name="fileName">文件完整路径名</param>
 5         /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
 6         /// <param name="isFirstRowColumn">第一行是否是DataTable的列名:true=是,false=否</param>
 7         /// <returns>DataTable数据表</returns>
 8         public static DataTable ReadExcelToDataTable(string fileName, string sheetName = null, bool isFirstRowColumn = true)
 9         {
10             //定义要返回的datatable对象
11             DataTable data = new DataTable();
12             //excel工作表
13             Npoi.SS.UserModel.ISheet sheet = null;
14             //数据开始行(排除标题行)
15             int startRow = 0;
16             try
17             {
18                 if (!File.Exists(fileName))
19                 {
20                     return null;
21                 }
22                 //根据指定路径读取文件
23                 FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
24                 //根据文件流创建excel数据结构
25                 Npoi.SS.UserModel.IWorkbook workbook = Npoi.SS.UserModel.WorkbookFactory.Create(fs);
26                 //IWorkbook workbook = new HSSFWorkbook(fs);
27                 //如果有指定工作表名称
28                 if (!string.IsNullOrEmpty(sheetName))
29                 {
30                     sheet = workbook.GetSheet(sheetName);
31                     //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
32                     if (sheet == null)
33                     {
34                         sheet = workbook.GetSheetAt(0);
35                     }
36                 }
37                 else
38                 {
39                     //如果没有指定的sheetName,则尝试获取第一个sheet
40                     sheet = workbook.GetSheetAt(0);
41                 }
42                 if (sheet != null)
43                 {
44                     Npoi.SS.UserModel.IRow firstRow = sheet.GetRow(0);
45                     //一行最后一个cell的编号 即总的列数
46                     int cellCount = firstRow.LastCellNum;
47                     //如果第一行是标题列名
48                     if (isFirstRowColumn)
49                     {
50                         for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
51                         {
52                             Npoi.SS.UserModel.ICell cell = firstRow.GetCell(i);
53                             if (cell != null)
54                             {
55                                 string cellValue = cell.StringCellValue;
56                                 if (cellValue != null)
57                                 {
58                                     DataColumn column = new DataColumn(cellValue);
59                                     data.Columns.Add(column);
60                                 }
61                             }
62                         }
63                         startRow = sheet.FirstRowNum + 1;
64                     }
65                     else
66                     {
67                         startRow = sheet.FirstRowNum;
68                     }
69                     //最后一列的标号
70                     int rowCount = sheet.LastRowNum;
71                     for (int i = startRow; i <= rowCount; ++i)
72                     {
73                         Npoi.SS.UserModel.IRow row = sheet.GetRow(i);
74                         if (row == null) continue; //没有数据的行默认是null       
75
76                         DataRow dataRow = data.NewRow();
77                         for (int j = row.FirstCellNum; j < cellCount; ++j)
78                         {
79                             if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
80                                 dataRow[j] = row.GetCell(j).ToString();
81                         }
82                         data.Rows.Add(dataRow);
83                     }
84                 }
85                 return data;
86             }
87             catch (Exception ex)
88             {
89                 throw ex;
90             }
91         }

2.第二种是将excel文件流读取到datatable中

  1         /// <summary>
  2         /// 将文件流读取到DataTable数据表中
  3         /// </summary>
  4         /// <param name="fileStream">文件流</param>
  5         /// <param name="sheetName">指定读取excel工作薄sheet的名称</param>
  6         /// <param name="isFirstRowColumn">第一行是否是DataTable的列名:true=是,false=否</param>
  7         /// <returns>DataTable数据表</returns>
  8         public static DataTable ReadStreamToDataTable(Stream fileStream, string sheetName = null, bool isFirstRowColumn = true)
  9         {
 10             //定义要返回的datatable对象
 11             DataTable data = new DataTable();
 12             //excel工作表
 13             Npoi.SS.UserModel.ISheet sheet = null;
 14             //数据开始行(排除标题行)
 15             int startRow = 0;
 16             try
 17             {
 18                 //根据文件流创建excel数据结构,NPOI的工厂类WorkbookFactory会自动识别excel版本,创建出不同的excel数据结构
 19                 Npoi.SS.UserModel.IWorkbook workbook = Npoi.SS.UserModel.WorkbookFactory.Create(fileStream);
 20                 //如果有指定工作表名称
 21                 if (!string.IsNullOrEmpty(sheetName))
 22                 {
 23                     sheet = workbook.GetSheet(sheetName);
 24                     //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
 25                     if (sheet == null)
 26                     {
 27                         sheet = workbook.GetSheetAt(0);
 28                     }
 29                 }
 30                 else
 31                 {
 32                     //如果没有指定的sheetName,则尝试获取第一个sheet
 33                     sheet = workbook.GetSheetAt(0);
 34                 }
 35                 if (sheet != null)
 36                 {
 37                     Npoi.SS.UserModel.IRow firstRow = sheet.GetRow(0);
 38                     //一行最后一个cell的编号 即总的列数
 39                     int cellCount = firstRow.LastCellNum;
 40                     //如果第一行是标题列名
 41                     if (isFirstRowColumn)
 42                     {
 43                         for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
 44                         {
 45                             Npoi.SS.UserModel.ICell cell = firstRow.GetCell(i);
 46                             if (cell != null)
 47                             {
 48                                 string cellValue = cell.StringCellValue;
 49                                 if (cellValue != null)
 50                                 {
 51                                     DataColumn column = new DataColumn(cellValue);
 52                                     data.Columns.Add(column);
 53                                 }
 54                             }
 55                         }
 56                         startRow = sheet.FirstRowNum + 1;
 57                     }
 58                     else
 59                     {
 60                         startRow = sheet.FirstRowNum;
 61                     }
 62                     //最后一列的标号
 63                     int rowCount = sheet.LastRowNum;
 64                     for (int i = startRow; i <= rowCount; ++i)
 65                     {
 66                         Npoi.SS.UserModel.IRow row = sheet.GetRow(i);
 67                         if (row == null || row.FirstCellNum < 0) continue; //没有数据的行默认是null       
 68
 69                         DataRow dataRow = data.NewRow();
 70                         for (int j = row.FirstCellNum; j < cellCount; ++j)
 71                         {
 72                             //同理,没有数据的单元格都默认是null
 73                             Npoi.SS.UserModel.ICell cell = row.GetCell(j);
 74                             if (cell != null)
 75                             {
 76                                 if (cell.CellType == Npoi.SS.UserModel.CellType.Numeric)
 77                                 {
 78                                     //判断是否日期类型
 79                                     if (Npoi.SS.UserModel.DateUtil.IsCellDateFormatted(cell))
 80                                     {
 81                                         dataRow[j] = row.GetCell(j).DateCellValue;
 82                                     }
 83                                     else
 84                                     {
 85                                         dataRow[j] = row.GetCell(j).ToString().Trim();
 86                                     }
 87                                 }
 88                                 else
 89                                 {
 90                                     dataRow[j] = row.GetCell(j).ToString().Trim();
 91                                 }
 92                             }
 93                         }
 94                         data.Rows.Add(dataRow);
 95                     }
 96                 }
 97                 return data;
 98             }
 99             catch (Exception ex)
100             {
101                 throw ex;
102             }
103         }
				
时间: 2024-10-15 18:02:22

c#用NPOI将excel文件内容读取到datatable数据表中的相关文章

将txt文件内容导入sql server 数据库表中

将类似这样的txt文件,如何导入到sql server 数据库表中呢? 第一步,在开始菜单中 找到 sql server 的导入和导出数据 然后,在数据源 的下拉框中 选择 平面文件源 基本都是点击 下一步 选择好要导入数据的数据库 与表: 编辑映射 : 点击下一步 执行 然后 完成 查看数据库 表 数据已经导入 成功

PHP读取Excel文件内容

PHP读取Excel文件内容 项目需要读取Excel的内容,从百度搜索了下,主要有两个选择,第一个是PHPExcelReader,另外一个是PHPExcel. PHPExcelReader比较轻量级,仅支持Excel的读取,实际上就是一个Reader.但是可惜的是不能够支持Excel 2007的格式(.xlsx). PHPExcel比较强大,能够将内存中的数据输出成Excel文件,同时还能够对Excel做各种操作,下面主要介绍下如何使用PHPExcel进行Excel 2007格式(.xlsx)文

Java编程:使用Java读取Excel文件内容

微软的ODBC驱动程序把工作表中的第一行作为列名(译者注:即字段名),工作表名作为数据库表名. 要通过JDBC访问工作表,我们还必须创建一个新的ODBC数据源,在Windows 2000系统上创建数据源的过程如下: 进入“控制面板” --> “管理工具” --> “数据源(ODBC)”,(译者注:打开后选择系统DSN),点击添加,在弹出窗口中选择“Driver do Microsoft Excel(*.xls)” 然后在数据源名处输入一个名字myexcel(译者注:相当于数据库名),然后点击“

读取Excel文件内容在Web上显示

点击事件代码.cs protected void Button1_Click(object sender, EventArgs e) { string strPath = "d:/test.xls"; string mystring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = '" + strPath + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=

NPOI操作Excel文件

首先,通过NuGet添加NPOI. NPOI依赖SharpZipLib,通过NuGet添加SharpZipLib. 然后添加NPOI. 添加后项目的引用列表如下: 把DataTable转换成Excel文件. 代码如下: public static MemoryStream RenderDataTableToExcel(DataTable table) { MemoryStream ms = new MemoryStream(); IWorkbook workbook = new HSSFWork

基于Vue + axios + WebApi + NPOI导出Excel文件

一.前言 项目中前端采用的Element UI 框架, 远程数据请求,使用的是axios,后端接口框架采用的asp.net webapi,数据导出成Excel采用NPOI组件.其业务场景,主要是列表页(如会员信息,订单信息等)表格数据导出,如表格数据进行了条件筛选,则需要将条件传至后端api,筛选数据后,导出成Excel. 思考过前端导出的3种方案: 1.使用location.href 打开接口地址.缺点: 不能传token至后端api, 无法保证接口的安全性校验,并且接口只能是get方式请求.

java使用POI实现excel文件的读取,兼容后缀名xls和xlsx

需要用的jar包如下: 如果是maven管理的项目,添加依赖如下: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </depen

将Excel文件内容拖拽至ExtJs的Panl

参考地址:http://loianegroner.com/2010/03/importing-an-excel-spreadsheet-into-an-extjs-datagrid-using-datadrop-grid-plugin/ 演示例子:https://github.com/loiane/extjs-grid-dragdrop-excel 将Excel文件内容拖拽至ExtJs的Panl,布布扣,bubuko.com

使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu] 不显示删除回复             显示所有回复             显示星级回复             显示得分回复             只显示楼主           收藏 关注 xieyongqiu maobingxixi 本版等级: 结帖率:71.43% 楼主发表于: 2010-09-13 17:33:03 使用POI 读取 Excel