Asp.net Core导出Excel
本篇文章是在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的更多相关文章
- Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel
Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...
- ASP.NET MVC导出excel
ASP.NET MVC导出excel 要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式 ...
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
JavaScript日历控件开发 概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- ASP.net中导出Excel的简单方法介绍
下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...
- 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
-----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...
- C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation
C# asp.net中导出Excel表时总出现"只能在执行 Render() 的过程中调用 RegisterForEventValidation 后台添加以下方法:/// <summa ...
- asp.net core导出导入excel
使用NPOI导入导出excel,已经封装好Action可以直接调用 导出 效果图 使用方法 定义导出实体 class Student { public int Id { get; set; } pub ...
- ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
随机推荐
- php redis 处理websocket聊天记录
<?php ini_set('display_errors', 'on'); class chatClass { private $redis; //这个变量模拟用户当前状态,是否登录,是否可查 ...
- Spring boot读取application.properties中文乱码
解决方案 在IDEA环境下: File -> Settings -> Editor -> File Encodings 将Properties Files (*.properties ...
- CentOS 安装 Ansible 以及连接Windows server的办法
1. CentOS机器上面按住那ansible yum install ansible 2. 安装 pywinrm 如果不安装 这个的话 ansible 会提示 没有 winrm 模块 注意需要先 ...
- 获取url参数值(可解码中文值)
/** * 根据指定参数名称获取参数值 * @param {String} urlStr 参数名称 * @return {Object} 参数值 * */ getUrlParams = functio ...
- python nympy 序列化dict
首先定义dict dict={} 对象写到dict dict['key']=object 存储dict np.save('dictname.npy',dict) 读取dict dictname=np. ...
- [Cordova 之 入门篇]
1. cordova是什么 Apache Cordova是一个开源的移动开发框架.允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 2. 为什么用cordova 基于 ...
- LODOP中tfoot和tbody中间线连不起来
这种情况发生在使用ADD_PRINT_TABLE时,ADD_PRINT_TABLE是Lodop中专门用来输出table表格的语句,它有很多特点,比如该语句不切行(详细可参考查看本博客相关博文:LODO ...
- cocos creator入门
前面的话 Cocos Creator 是一个完整的游戏开发解决方案,包括了 cocos2d-x 引擎的 JavaScript 实现,以及快速开发游戏所需要的各种图形界面工具.Cocos Creator ...
- Jetson TX1 compile pytorch issues
1. c++: internal compiler error: Killed (program cc1plus) reason: memory out, need swapfile 2. NCCL ...
- NoSQL Manager for MongoDB 30天到期破解
1.删除注册表:HKEY_CURRENT_USER\Software\NoSQL Manager Group2.删除应用数据:C:\ProgramData\NoSQL Manager Group 还是 ...