使用NPOI或EPPlus来导出Excel文件实例,可在Excel文件加密
使用NPOI.dll组件来导出Excel文件,并设置样式,Nuget引用即可。 packages\NPOI.2.1.3.1\lib\net20\NPOI.dll
#region Excel
protected Stream DataTable2Excel(DataView view, Dictionary<string, string> titles = null)
{
List<DataColumn> cols = new List<DataColumn>();
if (titles != null)
{
foreach (var item in titles)
{
if (view.Table.Columns.Contains(item.Key))
{
var col = view.Table.Columns[item.Key];
col.Caption = item.Value;
cols.Add(col);
}
}
}
else
{
foreach (DataColumn item in view.Table.Columns)
{
item.Caption = item.ColumnName;
cols.Add(item);
}
} HSSFWorkbook workbook = new HSSFWorkbook(); MemoryStream ms = new MemoryStream();
ISheet sheet = workbook.CreateSheet(SheetName);
IRow headerRow = sheet.CreateRow(0);
ICellStyle cellstyle = Getcellstyle(workbook, stylexls.头);
ICellStyle intstyle = Getcellstyle(workbook, stylexls.数字); for (int i = 0; i < cols.Count; i++)
{
var column = cols[i];
headerRow.CreateCell(i).SetCellValue(column.Caption);
headerRow.Cells[i].CellStyle = cellstyle;
}
int rowIndex = 1;
foreach (DataRowView row in view)
{
IRow dataRow = sheet.CreateRow(rowIndex);
int columnindex = 0;
foreach (DataColumn col in cols)
{
switch (col.DataType.Name)
{
case "DateTime":
dataRow.CreateCell(columnindex).SetCellValue((Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd"));
break;
case "String":
dataRow.CreateCell(columnindex).SetCellValue(row[col.ColumnName].ToString());
break;
case "Int16":
case "Int64":
case "Decimal":
case "Int32":
ICell cell = dataRow.CreateCell(columnindex);
cell.SetCellValue(((int)row[col.ColumnName]).ToString("N0"));
cell.CellStyle = intstyle;
break;
default:
dataRow.CreateCell(columnindex).SetCellValue(row[col.ColumnName].ToString());
break;
}
columnindex++;
}
rowIndex++;
}
for (int i = 0; i < cols.Count; i++)
{
sheet.AutoSizeColumn(i);
}
workbook.Write(ms);
ms.Flush();
ms.Position = 0; sheet = null;
headerRow = null;
workbook = null; return ms;
}
#region 定义单元格常用到样式
#region 定义单元格常用到样式的枚举
public enum stylexls
{
头,
url,
时间,
数字,
钱,
百分比,
中文大写,
科学计数法,
默认,
千分位
}
#endregion
protected static ICellStyle Getcellstyle(IWorkbook wb, stylexls str)
{
ICellStyle cellStyle = wb.CreateCellStyle(); //定义几种字体
//也可以一种字体,写一些公共属性,然后在下面需要时加特殊的
IFont header = wb.CreateFont();
header.FontHeightInPoints = 10;
header.FontName = "微软雅黑";
header.Boldweight = (short)FontBoldWeight.Bold; 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.Maroon.Index; //水平对齐
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left; //垂直对齐
cellStyle.VerticalAlignment = VerticalAlignment.Center; //自动换行
cellStyle.WrapText = true; //缩进;
cellStyle.Indention = 0; //下面列出了常用的字段类型
switch (str)
{
case stylexls.头:
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
cellStyle.SetFont(header);
break;
case stylexls.时间:
IDataFormat datastyle = wb.CreateDataFormat();
cellStyle.DataFormat = datastyle.GetFormat("yyyy/mm/dd");
cellStyle.SetFont(font);
break;
case stylexls.数字:
cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Right;
//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.千分位:
IDataFormat format2 = wb.CreateDataFormat();
cellStyle.DataFormat = format2.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
#endregion 使用EPPlus.dll来导出Excel, Nuget引用即可。可在Excel文件加密 packages\EPPlus.3.1.3.3\lib\net35\EPPlus.dll
#region Excel Encrypt
/// <summary>
/// 转换成带有密码的Excel文件。2007格式
/// </summary>
/// <param name="view"></param>
/// <param name="titles"></param>
/// <param name="passWord"></param>
/// <returns></returns>
protected Stream DataTable2Excel(DataView view, string passWord, Dictionary<string, string> titles = null)
{
List<DataColumn> cols = new List<DataColumn>();
if (titles != null)
{
foreach (var item in titles)
{
if (view.Table.Columns.Contains(item.Key))
{
var col = view.Table.Columns[item.Key];
col.Caption = item.Value;
cols.Add(col);
}
}
}
else
{
foreach (DataColumn item in view.Table.Columns)
{
item.Caption = item.ColumnName;
cols.Add(item);
}
}
MemoryStream stream = new MemoryStream();
using (OfficeOpenXml.ExcelPackage package = new OfficeOpenXml.ExcelPackage())
{
var rowIndex = 1;
OfficeOpenXml.ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(SheetName);
//写标题行
for (int i = 0; i < cols.Count; i++)
{
var column = cols[i];
var cell = worksheet.Cells[rowIndex, i + 1];
cell.Style.Font.Bold = true;
cell.Style.Font.Name = "微软雅黑";
cell.Style.Font.Size = 10;
cell.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
cell.Value = column.Caption;
}
rowIndex++;
foreach (DataRowView row in view)
{
int columnindex = 1;
foreach (DataColumn col in cols)
{
var cell = worksheet.Cells[rowIndex, columnindex];
switch (col.DataType.Name)
{
case "DateTime":
cell.Value = Convert.ToDateTime(row[col.ColumnName]).ToString("yyyy-MM-dd");
cell.Style.Numberformat.Format = "yyyy-mm-dd";
break;
case "String":
cell.Value = row[col.ColumnName].ToString();
break;
case "Int16":
case "Int64":
case "Decimal":
case "Int32":
cell.Value = (int)row[col.ColumnName];
cell.Style.Numberformat.Format = "0_);[Red](0)";
cell.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right;
break;
default:
cell.Value = row[col.ColumnName].ToString();
break;
}
worksheet.Column(columnindex).AutoFit();
columnindex++;
}
rowIndex++;
}
package.SaveAs(stream, passWord);
stream.Flush();
stream.Position = 0;
} return stream;
}
#endregion
使用NPOI或EPPlus来导出Excel文件实例,可在Excel文件加密的更多相关文章
- ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)
网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的 ...
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...
- .NET使用NPOI组件将数据导出Excel
.NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com/ ...
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
- ASP.NET Core使用EPPlus导入导出Excel
开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.NET Core中如何使用EPPlus组件导入导出Excel EPPlus: EPPlus是使用Open Office XML格式(xlsx) ...
- SSIS 中将csv 文件批量导出到excel 文件,并设置excel 文件中某些列的data column format 为Text
csv 文件是文本文件类型,但是打开csv 文件后(默认使用本地已经安装的excel 来打开excel 文件),默认显示出来的是general 类型(column data format)的数据, 这 ...
- java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工具框架
产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件. 需求分析 对于 excel 导出,是一个很常见的需求. 最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件. 客 ...
- .Net core 使用NPOI 直接导入Excel到数据库(即不先将Excel保存到服务器再读取文件到数据库)
/// <summary> /// 导入信息 /// </summary> /// <param name="file"></param& ...
- 原生PHP网页导出和导入excel文件实例
原生PHP实现的网页导出和导入excel文件实例,包括上传也是用的原生.还可在exportExcel方法里设置字体等表格样式. 导出和导入表单代码: <p style="margin: ...
随机推荐
- sql 使用条件
group by 1.在属性中出现相同内容的时候可以使用 2.也可以用来排序desc asc 批量插入数据 INSERT into 表(属性)(select *from 表) INSERT int ...
- vue脚手架中动态引用图片的办法
需要先导入: import logo_st_ga from '../assets/big_st_ga.png'; import logo_st_sp from '../assets/big_st_sp ...
- Maven基础。
---恢复内容开始--- Maven: 1.概念. * maven 是一个项目管理工具. * maven的作用. 1.jar包.依赖管理.将jar包放在jar包仓库(pom.xml),不需要每个项目都 ...
- flask启动找不到路由问题
解决方法
- Linux Kbuild文档(转)
转载链接:http://blog.chinaunix.net/uid-10221131-id-2943265.html Linux Kbuild文档 Linux Kbuild文档 V 0.1 tang ...
- Django之mysql数据库配置
在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'my ...
- (转!)MySql Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 解决方法
不要贪快,以你的聪明,只要有耐心,什么事不成,你真的争口气,羞羞这势利的世界也好! --久节奏,慢读书 转自:https://www.cnblogs.com/susuyu/archive/2013/0 ...
- 转,关于TCP粘包问题的一些思路
TCP粘包分析 一 .两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收. 2.短连接 Client方与Server每进 ...
- CentOS7.5搭建NFS(Network File System)
NFS(Network File System)即网络文件系统,是由Sun公司开发的一种通过网络方式共享文件系统的通用共享解决方案.可以将远程Linux系统上的文件共享资源挂载到本地主机(Linux客 ...
- 第三篇 -- XML Schema
验证XML文档是否符合议定的XML结构有两种方法,分别是DTD模式与XML Schema.本文主要介绍XML Schema. 一.XML Schema的优点 XML Schema基于XML,没有专门的 ...