NPOI导出Excel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#region NPOI
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using System.Web;
using System.IO;
using System.Data;
using System.Collections;
using System.Web.UI.WebControls;
#endregion
/*========================================================================================
*
*
* 说 明:导入、导出Excel
* 作 者:李朝强
* 日 期:2015/03/28
*
*
* =====================================================================================*/
namespace TiKu.Common.Office
{
public class Excel
{
#region ===============================================导出==================================
/// <summary>
/// 导出
/// </summary>
/// <param name="context">请求上下文</param>
/// <param name="fileName">导出文件的名</param>
/// <param name="stream">数据流</param>
public void Export(HttpContext context,
string fileName,
MemoryStream stream)
{
if (context.Request.Browser.Browser == "IE")
fileName = HttpUtility.UrlEncode(fileName);
context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
context.Response.BinaryWrite(stream.ToArray());
}
/// <summary>
/// 导出
/// </summary>
/// <param name="context">上下文</param>
/// <param name="filename">导出的文件名</param>
/// <param name="data">数据</param>
public void Export(HttpContext context,
string filename,
string sheetName,
Hashtable hashColumnInfos,
DataTable data)
{
MemoryStream ms = null;
try
{
ms = ReadToExcel(data,
sheetName,
hashColumnInfos);
//执行导出
Export(context, filename, ms);
}
catch (Exception ex) { throw ex; }
finally
{
if (null != ms)
{
ms.Close();
ms.Dispose();
}
}
}
/// <summary>
/// 从Repeat控件中,导出Excel
/// </summary>
/// <param name="RepList">控件</param>
/// <param name="filename">文件名</param>
/// <param name="sheetName">工作表</param>
public void Export(Repeater RepList,
string filename,
string sheetName,
HttpContext context)
{
object data = RepList.DataSource;
if (data is DataTable)
{
Export(context,
filename,
sheetName,
null,
(DataTable)data);
return;
}
if (data is DataView)
{
return;
}
if (data is IList)
{
return;
}
}
#endregion
#region ================================================数据流========================================
/// <summary>
/// 把DataTable对象,读取到内存流中
/// </summary>
/// <param name="data">DataTable对象</param>
/// <param name="hashColumnInfos">(可选)列</param>
/// <returns></returns>
public MemoryStream ReadToExcel(DataTable data,
string sheetName,
Hashtable hashColumnInfos)
{
sheetName = string.IsNullOrEmpty(sheetName) ? string.Format("Sheet-{0:yyy/MM/dd}", DateTime.Now) : sheetName;
//0>内存流
MemoryStream ms = new MemoryStream();
//1>创建工作薄
IWorkbook __workbook = new HSSFWorkbook();
//2>创建工作表
ISheet __sheet = __workbook.CreateSheet(sheetName);
#region 单元格样式
//单元格样式
ICellStyle cellStyle = __workbook.CreateCellStyle();
cellStyle.FillPattern = FillPattern.SolidForeground;
cellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Green.Index;
//设置字体
IFont font = __workbook.CreateFont();
font.Color = NPOI.HSSF.Util.HSSFColor.White.Index;
cellStyle.SetFont(font);
cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Green.Index;
#endregion
#region 3>创建表头
//创建一行
IRow __header = __sheet.CreateRow(0);
if (null == hashColumnInfos)
{
for (int i = 0; i < data.Columns.Count; i++)
{
//创建单元格
ICell __cell = __header.CreateCell(i);
__cell.SetCellValue(data.Columns[i].ColumnName);
__sheet.SetColumnWidth(i, 20 * 256);
__cell.CellStyle = cellStyle;
}
}
else
{
int j = 0;
foreach (DictionaryEntry item in hashColumnInfos)
{
//创建单元格
ICell __cell = __header.CreateCell(j);
__cell.SetCellValue(item.Value.ToString());
__sheet.SetColumnWidth(j, 20 * 256);
__cell.CellStyle = cellStyle;
++j;
}
}
#endregion
#region 4>创建数据行
int c = 0;
for (int k = 0; k < data.Rows.Count; k++)
{
IRow __dataRow = __sheet.CreateRow(k + 1);
for (c = 0; c < data.Columns.Count; c++)
{
ICell iCell = __dataRow.CreateCell(c);
iCell.SetCellValue(data.Rows[k][data.Columns[c].ColumnName].ToString());
c++;
}
c = 0;
}
#endregion
//5>最后,写入内存流
__workbook.Write(ms);
return ms;
}
/// <summary>
/// 把IDataReader对象,读取到内存流中
/// </summary>
/// <param name="dataReader">IDataReader对象</param>
/// <param name="sheetName">工作表名称</param>
/// <param name="hashColumnInfos">列</param>
/// <returns></returns>
public MemoryStream ReadToExcel(IDataReader dataReader,
string sheetName,
Hashtable hashColumnInfos)
{
//0>内存流
MemoryStream ms = new MemoryStream();
//1>创建工作薄
IWorkbook __workbook = new HSSFWorkbook();
//2>创建工作表
ISheet __sheet = __workbook.CreateSheet(sheetName);
#region 3>表头
IRow __header = __sheet.CreateRow(0);
if (null == hashColumnInfos)
{
for (int i = 0; i < dataReader.FieldCount; i++)
{
ICell iHeaderCell = __header.CreateCell(i);
iHeaderCell.SetCellValue(dataReader.GetName(i));
}
}
else
{
int j = 0;
foreach (DictionaryEntry item in hashColumnInfos)
{
//创建单元格
ICell __cell = __header.CreateCell(j);
__cell.SetCellValue(item.Value.ToString());
++j;
}
}
#endregion
#region 4>数据行
int n = 1;
while (dataReader.Read())
{
IRow __dataRow = __sheet.CreateRow(n);
for (int c = 0; c < dataReader.FieldCount; c++)
{
ICell iCell = __dataRow.CreateCell(c);
iCell.SetCellValue((dataReader.GetValue(c) ?? "").ToString());
}
}
#endregion
//5>写入内存流
__workbook.Write(ms);
return ms;
}
#endregion
}
}
NPOI导出Excel的更多相关文章
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- .NET NPOI导出Excel详解
NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office的文件. 支持的文件格式包括xls, ...
- NPOI导出Excel(含有超过65335的处理情况)
NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...
- [转]NPOI导出EXCEL 打印设置分页及打印标题
本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...
- 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限
大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...
- 用NPOI导出Excel
用NPOI导出Excel public void ProcessRequest(HttpContext context) { context.Response.ContentType = " ...
- NPOI导出Excel示例
摘要:使用开源程序NPOI导出Excel示例.NPOI首页地址:http://npoi.codeplex.com/,NPOI示例博客:http://tonyqus.sinaapp.com/. 示例编写 ...
- NPOI导出excel(带图片)
近期项目中用到Excel导出功能,之前都是用普通的office组件导出的方法,今天尝试用下NPOI,故作此文以备日后查阅. 1.NPOI官网http://npoi.codeplex.com/,下载最新 ...
随机推荐
- 结合Jexus + Kestrel 部署 asp.net core 生产环境
ASP.NET Core 是微软的全新的框架.这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖. 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: ...
- TODO:即将开发的第一个小程序
TODO:即将开发的第一个小程序 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能, ...
- ajax异步请求
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...
- C# 条形码操作【源码下载】
本篇介绍通过C#生成和读取一维码.二维码的操作. 目录 1. 介绍:介绍条形码.条形码的分类以及ZXing.Net类库. 2. 一维码操作:包含对一维码的生成.读取操作. 3. 二维码操作:包含对二维 ...
- JavaScript基础知识总结(三)
JavaScript语法 七.循环语句 1.while 语法: while (exp) { //statements; } 说明:while (变量<=结束值) { 需执行的代码 } 例子: / ...
- isEmpty和isNull()区别
isEmpty和isNull()区别一个NULL字符串一定是一个空串,一个空串未必是一个NULL字符串例如:QString().isNull(): //结果为trueQString().isEm ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- App解读
一直不懂别人口中说的原生开发.混合式开发.今天突然看了一篇文章讲解的是什么叫做原生App?移动 Web App?混合APP?分享给大家. 原生App是专门针对某一类移动设备而生的,它们都是直接安装到设 ...
- Android之SharedPreferences数据存储
一.SharedPreferences保存数据介绍 如果有想要保存的相对较小键值集合,应使用SharedPreferences API.SharedPreferences对象指向包含键值对的文件并提供 ...
- Linux设备管理(五)_写自己的sysfs接口
我们在Linux设备管理(一)_kobject, kset,ktype分析一文中介绍了kobject的相关知识,在Linux设备管理(二)_从cdev_add说起和Linux设备管理(三)_总线设备的 ...