NPOI帮助类
/// <summary>
/// NPOI导出帮助类
/// </summary>
public class NPOIHelper
{
/// <summary>
/// DataTable导出到Excel的MemoryStream
/// </summary>
/// <param name="dt">源DataTable</param>
/// <param name="dicTableHeader">表头文本</param>
private static MemoryStream Export(DataTable dt, Dictionary<string, string> dicTableHeader)
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("工作表1"); IRow headerRow = sheet.CreateRow();
int headerIndex = ; ICellStyle headerCellStyle = Getcellstyle(workbook, stylexls.头);
ICellStyle dateCellStyle = Getcellstyle(workbook, stylexls.时间); foreach (var item in dicTableHeader)
{
ICell cell = headerRow.CreateCell(headerIndex);
cell.CellStyle = headerCellStyle;
cell.SetCellValue(item.Value);
headerIndex = headerIndex + ;
}
sheet.CreateFreezePane(, , , ); int rowCount = dt.Rows.Count;
for (int i = ; i < rowCount; i++)
{
IRow row = sheet.CreateRow(i + );
int rowIndex = ;
foreach (var item in dicTableHeader)
{
ICell newCell = row.CreateCell(rowIndex);
rowIndex = rowIndex + ;
DataColumn dc = dt.Columns[item.Key];
string drValue = dt.Rows[i][item.Key].ToString();
switch (dc.DataType.ToString())
{
case "System.String"://字符串类型
newCell.SetCellValue(drValue);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
newCell.SetCellValue(dateV); newCell.CellStyle = dateCellStyle;//格式化显示
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(drValue, out boolV);
newCell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = ;
int.TryParse(drValue, out intV);
newCell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = ;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
newCell.SetCellValue("");
break;
default:
newCell.SetCellValue("");
break;
}
}
}
////自动列宽
//for (int i = 0; i <= dicTableHeader.Count; i++)
// sheet.AutoSizeColumn(i, true); using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = ;
return ms;
}
} /// <summary>
/// DataTable导出到Excel的MemoryStream
/// </summary>
/// <param name="dt">数据源DataTable</param>
/// <param name="heardList">头部列表</param>
/// <returns></returns>
private static MemoryStream Export(DataTable dt, IList<SYS_DICT> heardList)
{
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("工作表1"); ICellStyle headerCellStyle = Getcellstyle(workbook, stylexls.头);
ICellStyle dateCellStyle = Getcellstyle(workbook, stylexls.时间); IRow headerRow = sheet.CreateRow();
int headerIndex = ;
foreach (var item in heardList)
{
ICell cell = headerRow.CreateCell(headerIndex);
cell.CellStyle = headerCellStyle;
cell.SetCellValue(item.fname_ch);
headerIndex = headerIndex + ;
}
sheet.CreateFreezePane(, , , ); int rowCount = dt.Rows.Count;
for (int i = ; i < rowCount; i++)
{
IRow row = sheet.CreateRow(i + );
int rowIndex = ;
foreach (var item in heardList)
{
ICell newCell = row.CreateCell(rowIndex);
rowIndex = rowIndex + ;
DataColumn dc = dt.Columns[item.field_name];
string drValue = dt.Rows[i][item.field_name].ToString();
switch (dc.DataType.ToString())
{
case "System.String"://字符串类型
newCell.SetCellValue(drValue);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
newCell.SetCellValue(dateV); newCell.CellStyle = dateCellStyle;//格式化显示
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(drValue, out boolV);
newCell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = ;
int.TryParse(drValue, out intV);
newCell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = ;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
newCell.SetCellValue("");
break;
default:
newCell.SetCellValue("");
break;
}
}
}
////自动列宽
//for (int i = 0; i <= dicTableHeader.Count; i++)
// sheet.AutoSizeColumn(i, true); int heardListLen = heardList.Count;
for (int i = ; i < heardListLen; i++)
{
int width = ;
int.TryParse(heardList[i].ExcelColWidth.ToString(), out width);
width = (int)((width + 0.72) * );
sheet.SetColumnWidth(i, width);
} using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Position = ;
return ms;
}
} /// <summary>
/// 用于Web导出
/// </summary>
/// <param name="dt">数据源DataTable</param>
/// <param name="strFileName">文件名</param>
/// <param name="dicTableHeader">导出对照</param>
public static void ExportByWeb(DataTable dt, string strFileName, Dictionary<string, string> dicTableHeader)
{
HttpContext curContext = HttpContext.Current; // 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
strFileName = strFileName + DateTime.Now.ToString("yyyyMMddHHmmss");
string fileName = HttpUtility.UrlEncode(strFileName, Encoding.UTF8) + ".xls";
curContext.Response.AppendHeader("Content-Disposition",
"attachment;filename=" + fileName); curContext.Response.BinaryWrite(Export(dt, dicTableHeader).GetBuffer());
curContext.Response.End();
} /// <summary>
/// Web Excel导出
/// </summary>
/// <param name="dt">数据源DataTable</param>
/// <param name="strFileName">文件名</param>
/// <param name="heardList">头部列表</param>
public static void ExportByWeb(DataTable dt, string strFileName, IList<SYS_DICT> heardList)
{
HttpContext curContext = HttpContext.Current; // 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = Encoding.UTF8;
curContext.Response.Charset = "";
strFileName = strFileName + DateTime.Now.ToString("yyyyMMddHHmmss");
string fileName = HttpUtility.UrlEncode(strFileName, Encoding.UTF8) + ".xls";
curContext.Response.AppendHeader("Content-Disposition",
"attachment;filename=" + fileName); curContext.Response.BinaryWrite(Export(dt, heardList).GetBuffer());
curContext.Response.End();
} #region 定义单元格常用到样式的枚举
public enum stylexls
{
头,
url,
时间,
数字,
钱,
百分比,
中文大写,
科学计数法,
默认
}
#endregion #region 定义单元格常用到样式
private static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
{
ICellStyle cellStyle = wb.CreateCellStyle(); //定义几种字体
//也可以一种字体,写一些公共属性,然后在下面需要时加特殊的
IFont font12 = wb.CreateFont();
font12.FontHeightInPoints = ;
font12.FontName = "微软雅黑"; IFont headerFont = wb.CreateFont();
headerFont.FontHeightInPoints = ;
headerFont.IsBold = true;
headerFont.FontName = "微软雅黑"; IFont font = wb.CreateFont();
font.FontName = "微软雅黑";
//font.Underline = 1;下划线 IFont fontcolorblue = wb.CreateFont();
fontcolorblue.Color = HSSFColor.OliveGreen.Blue.Index;
fontcolorblue.IsItalic = true;//下划线
fontcolorblue.FontName = "微软雅黑"; //边框
cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Dotted;
cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Hair;
cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Dotted;
//边框颜色
cellStyle.BottomBorderColor = HSSFColor.OliveGreen.Blue.Index;
cellStyle.TopBorderColor = HSSFColor.OliveGreen.Blue.Index; //背景图形,我没有用到过。感觉很丑
//cellStyle.FillBackgroundColor = HSSFColor.OLIVE_GREEN.BLUE.index;
//cellStyle.FillForegroundColor = HSSFColor.OLIVE_GREEN.BLUE.index;
cellStyle.FillForegroundColor = HSSFColor.White.Index;
// cellStyle.FillPattern = FillPatternType.NO_FILL;
cellStyle.FillBackgroundColor = HSSFColor.Blue.Index; //水平对齐
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left; //垂直对齐
cellStyle.VerticalAlignment = VerticalAlignment.Center; //自动换行
cellStyle.WrapText = true; //缩进;当设置为1时,前面留的空白太大了。希旺官网改进。或者是我设置的不对
cellStyle.Indention = ; //上面基本都是设共公的设置
//下面列出了常用的字段类型
switch (str)
{
case stylexls.头:
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
// cellStyle.FillPattern = FillPatternType.LEAST_DOTS;
cellStyle.SetFont(headerFont);
break;
case stylexls.时间:
IDataFormat datastyle = wb.CreateDataFormat(); cellStyle.DataFormat = datastyle.GetFormat("yyyy-MM-dd HH:mm:ss");
cellStyle.SetFont(font);
break;
case stylexls.数字:
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
cellStyle.SetFont(font);
break;
case stylexls.钱:
IDataFormat format = wb.CreateDataFormat();
cellStyle.DataFormat = format.GetFormat("¥#,##0");
cellStyle.SetFont(font);
break;
case stylexls.url:
fontcolorblue.Underline = FontUnderlineType.Single;
cellStyle.SetFont(fontcolorblue);
break;
case stylexls.百分比:
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");
cellStyle.SetFont(font);
break;
case stylexls.中文大写:
IDataFormat format1 = wb.CreateDataFormat();
cellStyle.DataFormat = format1.GetFormat("[DbNum2][$-804]0");
cellStyle.SetFont(font);
break;
case stylexls.科学计数法:
cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
cellStyle.SetFont(font);
break;
case stylexls.默认:
cellStyle.SetFont(font);
break;
}
return cellStyle; } #endregion
}
NPOI帮助类的更多相关文章
- NET npoi帮助类
nuget添加npoi /// <summary> /// npoi帮助类 /// </summary> public static class NpoiHelper { // ...
- NPOI 帮助类
NPOI 帮助类 代码实现了来自于互联网 using System; using System.Data; using System.IO; using System.Text; using NPOI ...
- NPOI Excel类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using NPOI.HSSF.Us ...
- NPOI操作类
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- NPOI帮助类(Excel转DataTable、DataTable转Excel)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS. ...
- NPOI工具类
NPOI调用方法 DataTable dt = new DataTable(); Dictionary<string, string> header = new Dictionary< ...
- 免费高效实用的.NET操作Excel组件NPOI(.NET组件介绍之六)
很多的软件项目几乎都包含着对文档的操作,前面已经介绍过两款操作文档的组件,现在介绍一款文档操作的组件NPOI. NPOI可以生成没有安装在您的服务器上的Microsoft Office套件的Excel ...
- 总结一下工作中遇到的NPOI以及在ASP.NET MVC中的使用
1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些好的文章总结,方便以后再工作中使用. NPOI ...
- .NET使用NPOI组件将数据导出Excel
.NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com/ ...
随机推荐
- CSS实现table固定宽度,超过单元格部分内容省略
<table>单元格的宽度是根据内容的大小自适应的,没有内容的地方就挤到了一起.需要固定表格宽度和每一列的宽度. table-layout:fixed 在固定表格布局中,水平布局仅取决于表 ...
- Xamarin.Android 获取手机IP地址
命名空间: using System.Net; 代码: IPAddress[] address = Dns.GetHostAddresses(Dns.GetHostName()); ] != null ...
- 从零开始学 Web 之 Vue.js(一)Vue.js概述,基本结构,指令,事件修饰符,样式
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- C语言实现多态
C语言实现多态 首先声明,大神就不要看了.小弟水平有限. C++多态是通过虚函数表实现的,类似于JAVA多态的实现方式.关于Java多态的实现方式可以看我之前写过的一篇不是很完善的文章.从JVM角度看 ...
- Netty 超时机制及心跳程序实现
Netty 超时机制的介绍 Netty 的超时类型 IdleState 主要分为: ALL_IDLE : 一段时间内没有数据接收或者发送 READER_IDLE : 一段时间内没有数据接收 WRITE ...
- 深入理解JavaScript的事件循环(Event Loop)
一.什么是事件循环 JS的代码执行是基于一种事件循环的机制,之所以称作事件循环,MDN给出的解释为 因为它经常被用于类似如下的方式来实现 while (queue.waitForMessage()) ...
- [HAOI 2015]按位或
Description 题库链接 刚开始你有一个数字 \(0\) ,每一秒钟你会随机选择一个 \([0,2^n-1]\) 的数字,与你手上的数字进行或( \(\text{or}\) )操作.选择数字 ...
- using的几种用法
1.using指令.using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间 例如:using System; 一般都会出现在*.cs中. 2.using ...
- Eclipse SVN 冲突的 介绍 及 四种解决方式
https://blog.csdn.net/diyu122222/article/details/79879376
- C#添加IIS站点
利用IIS7自带类库管理IIS现在变的更强大更方便,而完全可以不需要用DirecotryEntry这个类了(乐博网中很多.net管理iis6.0的文章都用到了DirecotryEntry这个类 ),M ...