.Net Excel操作之NPOI(二)常用操作封装
一、Excel数据导出常用操作
1.指定表头和描述
2.指定数据库中读出的数据集合
二、ExcelExport封装
/// <summary>
/// Excel常用的表格导出逻辑封装
/// 单表写入
/// </summary>
public class ExcelExport
{
/// <summary>
/// 导出的Excel文件名称+路径
/// </summary>
public string FullName { get; set; }
/// <summary>
/// 导出的字段名称和描述
/// </summary>
public Dictionary<string, string> Fields { get; set; } private HSSFWorkbook _workbook = null;
private ISheet _sheet = null;
/// <summary>
/// 创建实例,验证导出文件名
/// </summary>
/// <param name="FullName"></param>
/// <param name="Fields"></param>
public ExcelExport(string FullName, Dictionary<string, string> Fields)
{
this.FullName = FullName;
this.Fields = Fields;
Check();
_workbook = new HSSFWorkbook();
_sheet = _workbook.CreateSheet("Sheet1");
}
/// <summary>
/// 验证Excel文件名
/// </summary>
private void Check()
{
try
{
FileInfo info = new FileInfo(this.FullName);
string[] extentions = new string[] {
".xls",
".xlsx"
};
if (extentions.Any(q => q == info.Extension) == false)
throw new Exception("excel文件的扩展名不正确,应该为xls或xlsx");
if (info.Exists == false)
info.Create().Close();
}
catch (Exception ex)
{
throw new Exception("创建Excel文件失败", ex);
}
} /// <summary>
/// 执行导出操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
public void Export<T>(List<T> list)
{
//写入表格头
WriteHead();
//写入数据
ICellStyle cellStyle = _workbook.CreateCellStyle();
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");//为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
cellStyle.BorderBottom = BorderStyle.Thin;
cellStyle.BorderLeft = BorderStyle.Thin;
cellStyle.BorderRight = BorderStyle.Thin;
cellStyle.BorderTop = BorderStyle.Thin;
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.Alignment = HorizontalAlignment.Center; IFont cellFont = _workbook.CreateFont();
cellFont.Boldweight = (short)FontBoldWeight.Normal;
cellStyle.SetFont(cellFont); //建立行内容,从1开始
int rowInex = ; foreach (var rowItem in list)
{
//创建行
IRow row = _sheet.CreateRow(rowInex);
row.HeightInPoints = ; int cellIndex = ;
foreach (var cellItem in this.Fields)
{
//创建单元格
ICell cell = row.CreateCell(cellIndex);
//反射获取属性的值
PropertyInfo info = rowItem.GetType().GetProperty(cellItem.Key);
if (info == null)
{
cell.SetCellValue($"'{cellItem.Key}'属性不存在");
}
else
{
object value = info.GetValue(rowItem);
if (value != null)
cell.SetCellValue(value.ToString());
}
cell.CellStyle = cellStyle;
cellIndex++;
}
//进入下一次循环
rowInex++;
} //自适应列宽度
for (int i = ; i < this.Fields.Count; i++)
{
_sheet.AutoSizeColumn(i);
} //导出到文件
WriteFile();
}
/// <summary>
/// 写入表头
/// </summary>
private void WriteHead()
{
//设置表头样式
ICellStyle headStyle = _workbook.CreateCellStyle();
headStyle.BorderBottom = BorderStyle.Thin;
headStyle.BorderLeft = BorderStyle.Thin;
headStyle.BorderRight = BorderStyle.Thin;
headStyle.BorderRight = BorderStyle.Thin;
headStyle.Alignment = HorizontalAlignment.Center;
headStyle.FillForegroundColor = HSSFColor.Blue.Index;
headStyle.VerticalAlignment = VerticalAlignment.Center; IFont headFont = _workbook.CreateFont();
headFont.Boldweight = (short)FontBoldWeight.Bold;
headStyle.SetFont(headFont); IRow row = _sheet.CreateRow();
row.HeightInPoints = ; int index = ;
foreach (var item in this.Fields)
{
ICell cell = row.CreateCell(index);
cell.SetCellValue(item.Value);
cell.CellStyle = headStyle;
index++;
}
}
/// <summary>
/// 创建文件到磁盘
/// </summary>
private void WriteFile()
{
using (FileStream fs = new FileStream(this.FullName, FileMode.OpenOrCreate))
{
_workbook.Write(fs);
fs.Flush();
fs.Close();
}
}
}
三、使用示例
1.匿名对象集合导出
Dictionary<string, string> fields = new Dictionary<string, string>();
fields.Add("ID", "主键");
fields.Add("Name", "姓名");
fields.Add("Age", "年龄");
fields.Add("Birthday", "生日");
ExcelExport _export = new ExcelExport(LocalPathHelper.GetCurrentData() + "/export1.xls", fields); List<object> list = new List<object>() {
new {ID=,Name="张三丰",Age=,Birthday=DateTime.Now },
new {ID=,Name="王芳",Age=,Birthday=DateTime.Now }
};
_export.Export(list);
2.List集合导出
TestOne _Context = new DBA.TestOne();
List<Member_Info> list = _Context.Member_Info.ToList();
Dictionary<string, string> fields = new Dictionary<string, string>();
fields.Add("MemberID", "主键");
fields.Add("code", "账号");
fields.Add("RealName", "姓名");
fields.Add("IsActive", "是否激活");
fields.Add("commission", "奖金余额"); //使用
ExcelExport _export = new ExcelExport(LocalPathHelper.GetCurrentData() + "\\export2.xls", fields);
//_export.Export(list);
_export.Export<Member_Info>(list);

更多:
.Net Excel操作之NPOI(二)常用操作封装的更多相关文章
- 第三百节,python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型
python操作redis缓存-其他常用操作,用于操作redis里的数据name,不论什么数据类型 delete(*names)根据删除redis中的任意数据类型 #!/usr/bin/env pyt ...
- php文件操作(最后进行文件常用函数封装)
文件信息相关API $filename="./1-file.php"; //filetype($filename):获取文件的类型,返回的是文件的类型 echo '文件类型为:', ...
- JS异步上传Excel 并使用NPOI进行读写操作
实现功能 导入——客户端使用 ajaxfileupload.js 插件实现Excel的异步上传,并在服务端解析成JSON字符串返回页面 导出——将页面中的grid表拼接成JSON串上传至服务器,在服务 ...
- python学习,excel操作之xlrd模块常用操作
import xlrd ##工作表## #打开excel f = xlrd.open_workbook("test.xlsx") file = f.sheet_by_name(&q ...
- Javascript 字符串(二)常用操作整理
一.js获取字符串的字节数 这个好使--- function getBytesLength(str) { // 在GBK编码里,除了ASCII字符,其它都占两个字符宽 return str.repla ...
- jdbc操作mysql(二):封装
案例四:封装共有操作 封装一个数据库的会话的类 import java.sql.*; public class ConnectionUtil { /** * 获取连接对象的方法,返回一个Connect ...
- php操作mysql几个常用操作
1.链接数据库 mysql_connet('数据库地址','数据库账号','数据库密码'); 2.选择数据库 mysql_select_db("数据库名"); 3.设置编码 mys ...
- Java中Io流操作-File类的常用操作-创建文件,创建文件夹
package com.hxzy.IOSer; import java.io.File;import java.io.IOException; public class Demo03 { public ...
- 版本控制工具——Git常用操作(上)
本文由云+社区发表 作者:工程师小熊 摘要:用了很久的Git和svn,由于总是眼高手低,没能静下心来写这些程序员日常开发最常用的知识点.现在准备开一个专题,专门来总结一下版本控制工具,让我们从git开 ...
- servlet常用操作
servlet常用操作 CreateTime--2017年9月7日09:36:43 Author:Marydon 1.获取当前应用程序对象 需要导入: import javax.servlet.S ...
随机推荐
- JS中的的"闭包"?深入Javascript之this
看了知乎上的话题 如何才能通俗易懂的解释javascript里面的‘闭包’?,受到一些启发,因此结合实例将回答中几个精要的答案做一个简单的分析以便加深理解. 1. "闭包就是跨作用域访问变量 ...
- Angular 2的表格控件
Angular 2的表格控件 前端框架一直这最近几年特别火的一个话题,尤其是Angular 2拥有众多的粉丝.在2016年9月份Angular 2正式发布之后,大量的粉丝的开始投入到了Angular ...
- CentOS图形界面下如何安装Eclipse和使用maven
不多说,直接上干货! http://www.eclipse.org/downloads/packages/release/Kepler/SR2 下载到/usr/local/下,解压完成之后,我们想用这 ...
- SpringBoot详细研究-05微服务与拾遗
这将是SpringBoot学习系列的最后一篇文章,主要涉及Spring Cloud和JHispter两个知识点,都具有一定综合性,需要多加实践加强理解. Spring Cloud 微服务Microse ...
- Oracle中append与Nologging
快速向表中插入大量数据Oracle中append与Nologging 2017-05-05 / VIEWS: 304 来源于:http://blog.sina.com.cn/s/blog_61cd89 ...
- collectionFramwork-1
1. Set.List和Map可以看做集合的三大类. List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问. Set集合是无序集合,集合中的元素不可以重复,访问集合中 ...
- bzoj1503 郁闷的出纳员
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
- BrowserLog——使用Chrome控制台作为Log查看器
Chrome控制台是十分强大的,即使将它作为一个log查看器也是非常强大的,BrowserLog就是一个.net下的把Chrome作为log输出的程序包. 原理非常简单,server端将log数据通过 ...
- SGU 200. Cracking RSA (高斯消元求自由变元个数)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=200 200. Cracking RSA time limit per test: ...
- Jack--10天学会IOS大纲;注意将图片放大观看!
第一天:磨刀霍霍期 耐得住性子好好熟悉和认识开发环境 ---------Jack/版权全部 认识开发环境 操作系统认识 Mac系统是苹果机专用系统.是基 ...