npoi导出excel 导出List<T>
using System.Collections.Generic;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
using System.Data;
using System; namespace CommonHelper
{
public class ExcelHelper
{ public ExcelHelper() { } /// <summary>
/// 文件流初始化对象
/// </summary>
/// <param name="stream"></param>
public ExcelHelper(Stream stream)
{
_IWorkbook = CreateWorkbook(stream);
} /// <summary>
/// 传入文件名
/// </summary>
/// <param name="fileName"></param>
public ExcelHelper(string fileName)
{
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
_IWorkbook = CreateWorkbook(fileStream);
}
} /// <summary>
/// 工作薄
/// </summary>
private IWorkbook _IWorkbook; /// <summary>
/// 创建工作簿对象
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
private IWorkbook CreateWorkbook(Stream stream)
{
try
{
return new XSSFWorkbook(stream); //
}
catch
{
return new HSSFWorkbook(stream); //
} } /// <summary>
/// 把Sheet中的数据转换为DataTable
/// </summary>
/// <param name="sheet"></param>
/// <returns></returns>
private DataTable ExportToDataTable(ISheet sheet)
{
DataTable dt = new DataTable(); //默认,第一行是字段
IRow headRow = sheet.GetRow(); //设置datatable字段
for (int i = headRow.FirstCellNum, len = headRow.LastCellNum; i < len; i++)
{
dt.Columns.Add(headRow.Cells[i].StringCellValue);
}
//遍历数据行
for (int i = (sheet.FirstRowNum + ), len = sheet.LastRowNum + ; i < len; i++)
{
IRow tempRow = sheet.GetRow(i);
DataRow dataRow = dt.NewRow(); //遍历一行的每一个单元格
for (int r = , j = tempRow.FirstCellNum, len2 = tempRow.LastCellNum; j < len2; j++, r++)
{ ICell cell = tempRow.GetCell(j); if (cell != null)
{
switch (cell.CellType)
{
case CellType.STRING:
dataRow[r] = cell.StringCellValue;
break;
case CellType.NUMERIC:
dataRow[r] = cell.NumericCellValue;
break;
case CellType.BOOLEAN:
dataRow[r] = cell.BooleanCellValue;
break;
default: dataRow[r] = "ERROR";
break;
}
}
}
dt.Rows.Add(dataRow);
}
return dt;
} /// <summary>
/// Sheet中的数据转换为List集合
/// </summary>
/// <param name="sheet"></param>
/// <param name="fields"></param>
/// <returns></returns>
private IList<T> ExportToList<T>(ISheet sheet,string[] fields) where T:class,new()
{
IList<T> list = new List<T>(); //遍历每一行数据
for (int i = sheet.FirstRowNum + , len = sheet.LastRowNum + ; i < len; i++)
{
T t=new T();
IRow row = sheet.GetRow(i); for (int j = , len2 = fields.Length; j < len2; j++)
{
ICell cell=row.GetCell(j);
object cellValue= null; switch (cell.CellType)
{
case CellType.STRING: //文本
cellValue = cell.StringCellValue;
break;
case CellType.NUMERIC: //数值
cellValue =Convert.ToInt32(cell.NumericCellValue);//Double转换为int
break;
case CellType.BOOLEAN: //bool
cellValue = cell.BooleanCellValue;
break;
case CellType.BLANK: //空白
cellValue = "";
break;
default: cellValue = "ERROR";
break;
} typeof(T).GetProperty(fields[j]).SetValue(t,cellValue,null);
}
list.Add(t);
} return list;
} /// <summary>
/// 获取第一个Sheet的第X行,第Y列的值。起始点为1
/// </summary>
/// <param name="X">行</param>
/// <param name="Y">列</param>
/// <returns></returns>
public string GetCellValue(int X, int Y)
{
ISheet sheet = _IWorkbook.GetSheetAt(); IRow row = sheet.GetRow(X-); return row.GetCell(Y-).ToString();
} /// <summary>
/// 获取一行的所有数据
/// </summary>
/// <param name="X">第x行</param>
/// <returns></returns>
public string[] GetCells(int X)
{
List<string> list = new List<string>(); ISheet sheet = _IWorkbook.GetSheetAt(); IRow row = sheet.GetRow(X-); for (int i = , len = row.LastCellNum; i < len; i++)
{
list.Add(row.GetCell(i).StringCellValue);//这里没有考虑数据格式转换,会出现bug
}
return list.ToArray();
} /// <summary>
/// 第一个Sheet数据,转换为DataTable
/// </summary>
/// <returns></returns>
public DataTable ExportExcelToDataTable()
{
return ExportToDataTable(_IWorkbook.GetSheetAt());
} /// <summary>
/// 第sheetIndex表数据,转换为DataTable
/// </summary>
/// <param name="sheetIndex">第几个Sheet,从1开始</param>
/// <returns></returns>
public DataTable ExportExcelToDataTable(int sheetIndex)
{
return ExportToDataTable(_IWorkbook.GetSheetAt(sheetIndex-));
} /// <summary>
/// Excel中默认第一张Sheet导出到集合
/// </summary>
/// <param name="fields">Excel各个列,依次要转换成为的对象字段名称</param>
/// <returns></returns>
public IList<T> ExcelToList<T>(string[] fields) where T:class,new ()
{
return ExportToList<T>(_IWorkbook.GetSheetAt(),fields);
} /// <summary>
/// Excel中指定的Sheet导出到集合
/// </summary>
/// <param name="sheetIndex">第几张Sheet,从1开始</param>
/// <param name="fields">Excel各个列,依次要转换成为的对象字段名称</param>
/// <returns></returns>
public IList<T> ExcelToList<T>(int sheetIndex,string[] fields) where T:class,new()
{
return ExportToList<T>(_IWorkbook.GetSheetAt(sheetIndex-), fields);
} }
}
npoi导出excel 导出List<T>的更多相关文章
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- C#中用NPOI的excel导出
//机构表导出 private static List<User2> amininf = new BLL.Bll().GetUser2s(); //定义数据源导出对象 #region 导出 ...
- C# 实现NPOI的Excel导出
技术点: 1.自定义attribute属性 2.通过反射取类及其属性的attribute属性值 3.NPOI包常用属性及方法(我也仅仅知道用到过的,陌生的要么见名知意,要么百度查) 实现功能点: Li ...
- WPF 导出Excel 导出图片
/// <summary> /// 导出Excel /// </summary> private void ExportExcel(DataTable ExcelDt) { / ...
- yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法
作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- PowerBuilder中调用NPOI进行Excel导出格式设置示例
// 功能 :新建excel带边框的单元格,格式为数字并显示为美元货币 // 参数 :ai_row,行号:ai_col,列号 // 返回值 :true/false // 作者 :潮崖之飔 // 日期 ...
- C#导出Excel那些事
Excel导出 Excel导出的意义 因为在项目中有些报表数据客户需要导出功能,那么导出为Excel就十分有必要了,可是有些客户的机器上并没有安装Excel或者安装的版本参差不一.那么我们在这样的情况 ...
- .NET Excel导出方法及其常见问题详解
摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...
- 导入/导出Excel
--从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:/*============================================================ ...
随机推荐
- python网络爬虫入门范例
python网络爬虫入门范例 Windows用户建议安装anaconda,因为有些套件难以安装. 安装使用pip install * 找出所有含有特定标签的HTML元素 找出含有特定CSS属性的元素 ...
- 636. Exclusive Time of Functions
// TODO: need improve!!! class Log { public: int id; bool start; int timestamp; int comp; // compasa ...
- ESP-01S-ESP8266入门教程
1.模块实物 2.引脚说明 3.连接说明,按下图将引脚连接到PC的串口(VCC接3V,GND接地,TX接串口TX,RX接串口的RX,CH_PD接3V,否则wifi不工作) 4.通过该PC串口配置WiF ...
- Git-补丁文件交互
版本库间的交互是通过git push和/或git pull命令实现的,这是Git最主要的交互模式,但并不是全部.使用补丁文件是另外一种交互方式,适用于参与者众多的大型项目进行分布式开发. 创建补丁 G ...
- label标签的作用
在用户注册的时候,常常用户点击文字就需要将光标聚焦到对应的表单上面,这个是怎么实现的呢?就是下面我要介绍的<label>标签的for属性 定义:for 属性规定 label 与哪个表单元素 ...
- luogu3317 [SDOI2014]重建
原来矩阵树定理对于边是概率的情况也是适用的qwqwq. ref #include <iostream> #include <cstdio> #include <cmath ...
- ADMX Migrator
实用工具特别推荐ADMX MigratorLance Whitney 下载这篇文章的代码: ADMX Migrator (2765KB) 对于那些 使用组策略的人而言,他们自然非常熟悉如何使用管理模板 ...
- 【HTML&CSS】 第一章:DTD文档声明
<!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关 ...
- leetcode 【Rotate List 】python 实现
题目: Given a list, rotate the list to the right by k places, where k is non-negative. For example:Giv ...
- flask 基础ssti注入
源代码地址 (请用python2.7运行,python3有点出入) 注入点: 不是返回的静态模板而是反回模板字符串变得让客户端可以控制. XSS 这里直接 http://39.105.116.195: ...