C# NOPI读取Excel
来源:互联网 发布:阿里巴巴排名软件 编辑:程序博客网 时间:2024/05/29 09:50
/// <summary>
/// Excel的辅助类
/// </summary>
public class ExcelHelper
{
/// <summary>
/// 读取excel到datatable中
/// </summary>
/// <param name="excelPath">excel地址</param>
/// <param name="sheetIndex">sheet索引</param>
/// <returns>成功返回datatable,失败返回null</returns>
public static DataTable ImportExcel(string excelPath, int sheetIndex)
{
IWorkbook workbook = null;//全局workbook
ISheet sheet;//sheet
DataTable table = null;
try
{
FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
if (fileInfo.Exists)
{
FileStream fileStream = fileInfo.OpenRead();//打开文件,得到文件流
switch (fileInfo.Extension)
{
//xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
case ".xls": workbook = new HSSFWorkbook(fileStream); break;
case ".xlsx": workbook = new XSSFWorkbook(fileStream); break;
default: break;
}
fileStream.Close();//关闭文件流
}
if (workbook != null)
{
sheet = workbook.GetSheetAt(sheetIndex);//读取到指定的sheet
table = new DataTable();//初始化一个table
IRow headerRow = sheet.GetRow(0);//获取第一行,一般为表头
int cellCount = headerRow.LastCellNum;//得到列数
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
table.Columns.Add(column);
}
//遍历读取cell
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
DataRow dataRow = table.NewRow();//新建一个行
for (int j = row.FirstCellNum; j < cellCount; j++)
{
ICell cell = row.GetCell(j);//得到cell
if (cell == null)//如果cell为null,则赋值为空
{
dataRow[j] = "";
}
else
{
dataRow[j] = row.GetCell(j).ToString();//否则赋值
}
}
table.Rows.Add(dataRow);//把行 加入到table中
}
}
return table;
}
catch (Exception e)
{
return table;
}
finally
{
//释放资源
if (table != null) { table.Dispose(); }
workbook = null;
sheet = null;
}
}
}
添加引用如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Collections;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
后来改动了下成全索引表格导入,不过表头这个问题,没有细致处理,从第一个表之后,后面的表头会一并导入 不怎么用 有网友需要可以自行改动
/// <summary>
/// Excel的辅助类
/// </summary>
public class ExcelHelper
{
/// <summary>
/// 读取excel到datatable中
/// </summary>
/// <param name="excelPath">excel地址</param>
/// <param name="sheetIndex">sheet索引</param>
/// <returns>成功返回datatable,失败返回null</returns>
public static DataTable ImportExcel(string excelPath, int sheetIndex)
{
IWorkbook workbook = null;//全局workbook
ISheet sheet;//sheet
DataTable table = null;
try
{
FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
if (fileInfo.Exists)
{
FileStream fileStream = fileInfo.OpenRead();//打开文件,得到文件流
switch (fileInfo.Extension)
{
//xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
case ".xls": workbook = new HSSFWorkbook(fileStream); break;
case ".xlsx": workbook = new XSSFWorkbook(fileStream); break;
default: break;
}
fileStream.Close();//关闭文件流
}
if (workbook != null)
{
table = new DataTable();//初始化一个table
sheetIndex = workbook.NumberOfSheets;//MX2017-05-02 11:01:39
for (int k = 0; k < sheetIndex; k++)
{
if (k!=0)
{
// table = null;
sheet = null;
}
sheet = workbook.GetSheetAt(k);//读取到指定的sheet
IRow headerRow ;
if (k==0)
{
headerRow = sheet.GetRow(0);//获取第一行,一般为表头
}
else
{
headerRow = sheet.GetRow(1);
}
int cellCount = headerRow.LastCellNum;//得到列数
if (k==0)
{
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
table.Columns.Add(column);
}
}
else
{
for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
// DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
// table.Columns.Add(column);
}
}
//遍历读取cell
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
DataRow dataRow = table.NewRow();//新建一个行
for (int j = row.FirstCellNum; j < cellCount; j++)
{
ICell cell = row.GetCell(j);//得到cell
if (cell == null)//如果cell为null,则赋值为空
{
dataRow[j] = "";
}
else
{
dataRow[j] = row.GetCell(j).ToString();//否则赋值
}
}
table.Rows.Add(dataRow);//把行 加入到table中
}
}
}
return table;
}
catch (Exception e)
{
return table;
}
finally
{
//释放资源
if (table != null) { table.Dispose(); }
workbook = null;
sheet = null;
}
}
}
- C# NOPI读取Excel
- 使用NOPI读取Word、Excel文档内容
- C#利用NOPI处理Excel的代码
- C#利用NOPI处理Excel的代码
- C#利用NOPI导出到Excel
- Nopi Excel下载功能
- NOPI操作Excel
- NOPI导出excel
- nopi导入导出excel
- NOPI\\Excel导入数据
- NOPI用模板生成excel
- NOPI实现生成Excel数据表
- NOPI导出标准格式Excel
- C# NOPI实现导出 类
- C#读取Excel,导出Excel
- C#读取Excel,导出Excel
- C#读取excel表
- C#读取Excel数据
- JAVA数据结构:希尔排序
- 图像浮雕效果的实现
- unity 1.4 Snap 与场景布置
- 将文件复制到临时文件夹
- 随笔Android IPC进程通信之——Messenger
- C# NOPI读取Excel
- easyrecyclerview 刷新加载功能代码分析(填坑之旅)
- InputField--Object reference not set to an instance of an object
- Android中的抖动解码(inDither)
- 使用Nexus搭建Maven私服
- 深度学习资料整理
- php 生辟字数组处理
- 数据库系统概念(机械工业出版社,第六版)复习——第三章:SQL
- CS:APP二进制炸弹phase4