本篇文章是在MVC设计模式下,基于windows系统的Excel导出

1.前台的实现不用我多说了吧,加一个a标签链接地址跳到它所调用的方法里面,可以根据当前页面的查询条件去传值,从而查询出你想要的数据然后导出

下面我们就直接来看控制器里的方法和对数据的处理

/// <summary>
/// 导出数据
/// </summary>
/// <returns></returns>
public void ExportData(int pageIndex, int limit, string name, string startVisitTime, string endVisitTime, string addUser)
{
int count = 0;
string fileExt = ".xls";
try
{
if (pageIndex != 0)
{
pageIndex = 0;
}
List<VisitsRecordDto> visitRecord = visitRecordReportInterface.GetVisitRecordList(pageIndex, limit, name, startVisitTime, endVisitTime, addUser, out count);
Dictionary<string, string> columnNames = new Dictionary<string, string> {
{ "AddUser","添加人" },
{ "VisitsTime", "拜访日期" },
{ "CustomerName", "客户名称" },
{ "LinkMan", "联系人" },
{ "CustomerNeed", "客户需求" },
{ "ExistingProblem", "存在的问题" },
{ "SuccessEffect", "达成的效果" },
{ "NextPlan", "下一步跟进计划" },
{ "VisitEvalaute", "拜访评价" },
{ "Score", "拜访评分" }
};
byte[] stream = Common.ExcelHelper.CollectionsToExcel<VisitsRecordDto>(visitRecord, fileExt, columnNames);
//获取文件的ContentType
var provider = new FileExtensionContentTypeProvider();
var memi = provider.Mappings[fileExt];
Response.ContentType = memi;
Encoding utf8 = Encoding.UTF8;
//将已经解码的字符再次进行编码.
string encode = HttpUtility.UrlEncode("拜访总结报表.xls", utf8).ToUpper();

Response.Headers.Add("Content-Disposition", "attachment;filename=" + encode);
Response.Body.Write(stream);
Response.Body.Flush();
Response.Body.Close();
}
catch (Exception ex)
{

}
}

3.将Excel转换为Datatable

/// <summary>
/// 集合导出Excel
/// </summary>
/// <param name="list">集合</param>
/// <param name="fileExt">文件后缀</param>
/// <param name="columnNames">列名转换</param>
/// <param name="dicOnly">部分转换</param>
/// <returns></returns>
public static byte[] CollectionsToExcel<T>(List<T> list, string fileExt, Dictionary<string, string> columnNames,bool dicOnly=false)
{
if (list.Count() <= 0)
{
return null;
}
DataTable dt = CollectionsToDataTable<T>(list);
IWorkbook workbook;
ICellStyle cellStyle;
ICellStyle headerCellStyle;
if (fileExt == ".xlsx")
{
workbook = new XSSFWorkbook();
cellStyle = (XSSFCellStyle)workbook.CreateCellStyle();
headerCellStyle = (XSSFCellStyle)workbook.CreateCellStyle();
}
else if (fileExt == ".xls")
{
workbook = new HSSFWorkbook();
cellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
headerCellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
}
else
{
workbook = null;
cellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
headerCellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
return null;
}

ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName);

IFont font = workbook.CreateFont();
font.FontName = "宋体";
font.FontHeightInPoints = 9;

cellStyle.Alignment = HorizontalAlignment.Left;
cellStyle.VerticalAlignment = VerticalAlignment.Center;
cellStyle.BorderBottom = BorderStyle.Thin;
cellStyle.BorderTop = BorderStyle.Thin;
cellStyle.BorderLeft = BorderStyle.Thin;
cellStyle.BorderRight = BorderStyle.Thin;
cellStyle.SetFont(font);

IFont headerFont = workbook.CreateFont();
headerFont.FontName = "宋体";
headerFont.FontHeightInPoints = 9;
headerFont.Boldweight = short.MaxValue;
headerCellStyle.Alignment = HorizontalAlignment.Center;
headerCellStyle.VerticalAlignment = VerticalAlignment.Center;
headerCellStyle.FillForegroundColor = 22;
headerCellStyle.FillPattern = FillPattern.SolidForeground;
headerCellStyle.BorderBottom = BorderStyle.Thin;
headerCellStyle.BorderTop = BorderStyle.Medium;
headerCellStyle.BorderLeft = BorderStyle.Thin;
headerCellStyle.BorderRight = BorderStyle.Thin;
headerCellStyle.SetFont(headerFont);

if (dicOnly == true)
{
for (int i = dt.Columns.Count - 1; i >= 0; i--)
{
string rowName = dt.Columns[i].ColumnName;
if (!columnNames.Keys.Contains(rowName))
{
dt.Columns.RemoveAt(i);
}
}
}

//表头
IRow row = sheet.CreateRow(0);
row.HeightInPoints = 20;
for (int i = 0; i < dt.Columns.Count; i++)
{
sheet.SetColumnWidth(i, 25 * 256);
ICell cell = row.CreateCell(i);
cell.CellStyle = headerCellStyle;
string rowName = dt.Columns[i].ColumnName;
if (columnNames.Keys.Contains(rowName))
{
cell.SetCellValue(columnNames[rowName]);
}
else
{
cell.SetCellValue(dt.Columns[i].ColumnName);
}
}

//数据
for (int i = 0; i < dt.Rows.Count; i++)
{
//将数据从表格第二行开始填入
IRow row1 = sheet.CreateRow(i + 1);
row1.HeightInPoints = 15;
for (int j = 0; j < dt.Columns.Count; j++)
{
ICell cell = row1.CreateCell(j);
cell.CellStyle = cellStyle;
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}

//转为字节数组
MemoryStream stream = new MemoryStream();
workbook.Write(stream);
var buf = stream.ToArray();
workbook.Close();
stream.Close();
stream.Dispose();
return buf;
}

将集合转换为datatable

/// <summary>
/// 将集合转为DataTable
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable CollectionsToDataTable<T>(List<T> list)
{
Type type = typeof(T);
DataTable dt = new DataTable();
foreach (PropertyInfo item in type.GetProperties())
{
dt.Columns.Add(item.Name, typeof(string));
}
foreach (T item in list)
{
DataRow Row = dt.NewRow();
foreach (PropertyInfo propertyInfo in type.GetProperties())
{
if (propertyInfo.PropertyType == typeof(DateTime?))
{
Row[propertyInfo.Name] = propertyInfo.GetValue(item) == null ? "" : DateTime.Parse(propertyInfo.GetValue(item).ToString()).ToString("yyyy-MM-dd");
}
else
{
Row[propertyInfo.Name] = propertyInfo.GetValue(item);
}
}
dt.Rows.Add(Row);
}
return dt;
}

Asp.net Core导出Excel的更多相关文章

  1. Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel

    Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...

  2. ASP.NET MVC导出excel

    ASP.NET MVC导出excel 要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式 ...

  3. JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动

    JavaScript日历控件开发   概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...

  4. asp.net中导出Excel的方法

    一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

  5. ASP.net中导出Excel的简单方法介绍

    下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...

  6. 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

    -----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...

  7. C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation

    C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...

  8. asp.net core导出导入excel

    使用NPOI导入导出excel,已经封装好Action可以直接调用 导出 效果图 使用方法 定义导出实体 class Student { public int Id { get; set; } pub ...

  9. ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

    要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...

随机推荐

  1. ASP.NET MVC 下自定义 JsonResult,使用 Json.NET 序列化 JSON

    直接贴代码了: using System; using System.Web.Mvc; using Newtonsoft.Json; namespace MvcSample.Extensions { ...

  2. VisualStudio 快捷键

    ctrl + o : 打开当前文件所在文件目录 ctrl + 鼠标左键 : 转到方法或者字段定义

  3. 免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐

    免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐        隐鹤 倾心开发 2019.4.1 1.   引言 经过前后大约零零散散的一年的开发, ...

  4. 服务端返回的json数据,导致前端报错的原因及解决方法

    前言 最近在开发的过程中遇到了一个问题:后端传过来的json字符串不是标准的json字符串 导致报错的原因 后端传过来的json字符串中包含一些不标准的字符或错误的引号嵌套 1)\n 2) \r 3) ...

  5. Flask--特殊装饰器, CBV, 三方组件

    一. Flask中的特殊装饰器 before_request # before_request 是在视图函数执行之前执行的 @app.before_request def before(): prin ...

  6. 搭建alpine仓库 提供apk包

    搭建alpine私有仓库从官方拉取alpine所有的包 wget -r -np -nH http://nl.alpinelinux.org/alpine/v3.5/main/x86_64/ wget ...

  7. HDU1754-ZKW线段树

    单点更新,区间最值 HDU 1754 // // Created by helica on 2018/3/18. // //zkw线段树 单点修改 区间求最值 //HDU 1754 #include ...

  8. Windows Subsystem for Linux 环境变量

    WSL(Windows Subsystem for Linux )的环境变量是包含Linux子系统和Windows系统的,测试如下: wy@WY-PC:/mnt/c/Windows/System32$ ...

  9. 「FHQ Treap」学习笔记

    话说天下大事,就像fhq treap —— 分久必合,合久必分 简单讲一讲.非旋treap主要依靠分裂和合并来实现操作.(递归,不维护fa不维护cnt) 合并的前提是两棵树的权值满足一边的最大的比另一 ...

  10. shell-计算虚拟机创建时间

    因为要验证虚拟机创建时间,所以写了下面一个脚本 #!/bin/bash ################################################################ ...