使用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: ...
随机推荐
- java 不同时间格式转化
今天项目中遇到一个格式问题,收到的timestamp格式是2019-08-19-16:03:21 , 但是入es时,当类型为date的时候,这种格式直接报错,因为索引建的格式是yyyy-MM-dd H ...
- python的异常种类
AttributeError 访问一个对象没有的属性 比如:foo.x 但是foo没有x属性 IOError 输入/输出异常 基本是无法打开文件 ImportError 无法映入模块或包 路径或者名称 ...
- Mybatis如何插入空字段
出现异常:SQLException : 无效的类型: 1111 使用Mybatis插入一条记录,某字段设为null,出错 尝试将空的mgr属性插入到数据库,解决办法: 添加setting属性jdbcT ...
- freebsd缓存包与仓库版本不一致
问题描述: pkg install -y lrzsz pkg: cached package lrzsz-0.12.20_4: size mismatch, cannot continue 问题解决: ...
- python-Arduino串口传输数据到电脑并保存至excel表格
起因:学校运河杯报了个项目,制作一个天气预测的装置.我用arduino跑了BME280模块,用蓝牙模块实现两块arduino主从机透传.但是为了分析,还需要提取出数据.因此我用python写了个上位机 ...
- ThinkCMF_X1.6.0-X2.2.3框架任意内容包含漏洞的简单分析复现(附自动化验证脚本)
1.漏洞概述 攻击者可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,达到远程代码执行的目的 2.影响版本 ThinkCMF X1.6.0 ThinkCMF X2.1.0 ThinkCMF X ...
- IoT设备上的恶意软件——通过漏洞、弱密码渗透
2018年,是 IoT 高速发展的一年,从空调到电灯,从打印机到智能电视,从路由器到监控摄像头统统都开始上网.随着5G网络的发展,我们身边的 IoT 设备会越来越多.与此同时,IoT 的安全问题也慢慢 ...
- C++网站学习
0.C++ 一个专门做C++的网站 一.以下内容来自LEARN C++ 的<更好编写C++程序的5个建议>部分 1.C++的一些标准: Coding Standards C++ Cor ...
- git分布式版本控制系统的概述和安装
Git历史 同生活中的许多伟大赛事一样,Git诞生于一个极富纷争大举创新的年代.Linux内核开源项目有着为数众广的参与者.绝大多数的Linux内核维护工作都花在了提交补丁和保存归档的繁琐事务上(19 ...
- Linux 下 svn 多个项目多用户分配
安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图: 输入 svn –help可以查看svn的使用方法 需求 开发服务器 ...