使用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文件加密的更多相关文章

  1. ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)

    网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的 ...

  2. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  3. .NET使用NPOI组件将数据导出Excel

    .NPOI官方网站:http://npoi.codeplex.com/ 可以到此网站上去下载最新的NPOI组件版本 2.NPOI在线学习教程(中文版): http://www.cnblogs.com/ ...

  4. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

  5. ASP.NET Core使用EPPlus导入导出Excel

    开发过程中,经常会遇到导入导出数据的需求,本篇博客介绍在.NET Core中如何使用EPPlus组件导入导出Excel EPPlus: EPPlus是使用Open Office XML格式(xlsx) ...

  6. SSIS 中将csv 文件批量导出到excel 文件,并设置excel 文件中某些列的data column format 为Text

    csv 文件是文本文件类型,但是打开csv 文件后(默认使用本地已经安装的excel 来打开excel 文件),默认显示出来的是general 类型(column data format)的数据, 这 ...

  7. java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) excel 工具框架

    产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件. 需求分析 对于 excel 导出,是一个很常见的需求. 最常见的解决方案就是使用 poi 直接同步导出一个 excel 文件. 客 ...

  8. .Net core 使用NPOI 直接导入Excel到数据库(即不先将Excel保存到服务器再读取文件到数据库)

    /// <summary> /// 导入信息 /// </summary> /// <param name="file"></param& ...

  9. 原生PHP网页导出和导入excel文件实例

    原生PHP实现的网页导出和导入excel文件实例,包括上传也是用的原生.还可在exportExcel方法里设置字体等表格样式. 导出和导入表单代码: <p style="margin: ...

随机推荐

  1. APP安全测试

    app 常见风险 一. clinet端 1.反编译 2.签名破解 3.调试 4.导出组件 5.拒绝服务 6.输入记录 二.传输 1.信息泄露,未使用加密服务(ssl) 2.篡改 三.服务端 1.SQL ...

  2. 【爬虫】Load版的生产者和消费者模式

    ''' Lock版的生产者和消费者模式 ''' import threading import random import time gMoney = 1000 # 原始金额 gLoad = thre ...

  3. C#常用的图片处理方法-图片剪切、图片压缩、多图合并代码

    /// <summary> /// 图片转成圆角方法二 /// </summary> private Bitmap WayTwo(Bitmap bitmap) { //usin ...

  4. PHP操作MYSQL--PDO

    感觉比直接弄SQL语句高级,但还不到ORM的封装. 一步一步进化. app.json { "db": { "user": "root", & ...

  5. Appium如何查看webview上元素

    现在大部分app都是混合式的native+webview,对应native上的元素通过uiautomatorviewer很容易定位到,webview上的元素就无法识别了: 那么如何定位webview上 ...

  6. VC检测内存泄漏(Detected memory leaks!)

    Detected memory leaks!Dumping objects ->{98500} normal block at 0x05785AD0, 152 bytes long.Data: ...

  7. es6 Object 数据属性和访问器属性

    原文 :http://www.jb51.net/article/91698.htm 总结 ES5提供了Object.getOwnPropertyDescripter()方法来获取给定属性的描述符. p ...

  8. Mysql命令下导出select查询数据之 select ... into outfile方法

    Mysql日常使用中经常遇到将select查询的数据导出到本地目录的情况,以便数据备份.分析等. 接下来将介绍Mysql终端下使用 select ... into outfile 语句导出数据方法 命 ...

  9. [Algorithm] 136. Single Number

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  10. OKR失败的五个关键因素

    OKR是近年来的一个热点话题,这种目标管理法在谷歌体现了它非凡的价值,也因此被Facebook.Linkedin等公司所引用.从实践成功的案例看来,OKR确实是一种可以明确公司目标.促进公司发展的有价 ...