.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 ...
随机推荐
- fstab文件详解
挂载分区的位置 挂载点 分区格式 设置 备份自检 UUID=94e4e... / ext4 defaults,barrier=0 1 1 tmpfs /dev/shm tmpfs defaults 0 ...
- Python3 CNN中卷积和池化的实现--限制为二维输入
# -*- coding: utf-8 -*- """ Created on Wed Jan 31 14:10:03 2018 @author: markli " ...
- java中的二进制运算简单理解
package test9; public class StreamTest { public static void main(String[] args) { int a = 15;// 0b11 ...
- BZOJ 4198: [Noi2015]荷马史诗 哈夫曼树 k叉哈夫曼树
https://www.lydsy.com/JudgeOnline/problem.php?id=4198 https://blog.csdn.net/chn_jz/article/details/7 ...
- Codeforces 576D Flights for Regular Customers 矩阵快速幂+DP
题意: 给一个$n$点$m$边的连通图 每个边有一个权值$d$ 当且仅当当前走过的步数$\ge d$时 才可以走这条边 问从节点$1$到节点$n$的最短路 好神的一道题 直接写做法喽 首先我们对边按$ ...
- phpexcel错误 You tried to set a sheet active by the out of bounds index: 1解决办法
$objPHPExcel->createSheet($k);
- Redis主从同步分析(转)
一.Redis主从同步原理 1.1 Redis主从同步的过程 配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接 ...
- mongodb chunk 大小设置
默认是64MB,取值范围是1 MB 到 1024 MB. 那改动会造成什么?下表简单总结: chunk size 调节 splitting次数(碎片数) 数据跨shard数目 数据均匀 网络传输次数 ...
- 使用p3p跨域设置Cookie
有些时候不能将url上的参数传来传去,比如与调用某开放平台上的接口,这时候可能需要借助Cookie来进行处理了,但这里可能又涉及到跨域的问题. 如果浏览器开启了对Cookie的支持,按照Cookie ...
- 调试工具BTrace 的使用--例子
http://www.cnblogs.com/serendipity/archive/2012/05/14/2499840.html