1.数据导出为Excel的Stream

using System;
using System.Collections.Generic;
using System.IO;
using Abp.Collections.Extensions;
using OfficeOpenXml;
using System.Web;
using Abp.Web.Models; namespace Common.Exporting
{
public static class ExcelExporter<T>
{
/// <summary>
/// 导出Excel文件
/// </summary>
/// <returns></returns>
public static AjaxResponse GetFileResponse(string fileName, string sheetName, IList<T> dtoList, string[] header, Func<T, object>[] propertySelectors)
{
AjaxResponse res = new AjaxResponse();
try
{
byte[] data = ExportExcelStream(sheetName, dtoList,header, propertySelectors); var Response = HttpContext.Current.Response;
Response.ContentType = "applicationnd.ms - excel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
Response.Clear();
Response.BinaryWrite(data);
Response.End(); res.Success = true;
}
catch (Exception ex)
{
res.Success = false;
res.Error = new ErrorInfo();
res.Error.Code = ;
res.Error.Message = "导出数据错误";
res.Error.Details = ex.ToString();
} return res;
} public static byte[] ExportExcelStream(string sheetName, IList<T> dtoList, string[] header, Func<T, object>[] propertySelectors)
{
return CreateExcelStream(
excelPackage =>
{
var sheet = excelPackage.Workbook.Worksheets.Add(sheetName);
sheet.OutLineApplyStyle = true;
AddHeader(sheet, header);
AddObjects(sheet, , dtoList, propertySelectors); for (var i = ; i <= header.Length; i++)
{
sheet.Column(i).AutoFit();
}
});
} public static byte[] CreateExcelStream(Action<ExcelPackage> creator)
{
using (var excelPackage = new ExcelPackage())
{
creator(excelPackage);
MemoryStream ms = new MemoryStream();
excelPackage.SaveAs(ms);
return ms.GetBuffer();
}
} public static void AddHeader(ExcelWorksheet sheet, params string[] headerTexts)
{
if (headerTexts.IsNullOrEmpty())
{
return;
} for (var i = ; i < headerTexts.Length; i++)
{
AddHeader(sheet, i + , headerTexts[i]);
}
} public static void AddHeader(ExcelWorksheet sheet, int columnIndex, string headerText)
{
sheet.Cells[, columnIndex].Value = headerText;
sheet.Cells[, columnIndex].Style.Font.Bold = true;
} public static void AddObjects<T>(ExcelWorksheet sheet, int startRowIndex, IList<T> items, params Func<T, object>[] propertySelectors)
{
if (items.IsNullOrEmpty() || propertySelectors.IsNullOrEmpty())
{
return;
} for (var i = ; i < items.Count; i++)
{
for (var j = ; j < propertySelectors.Length; j++)
{
sheet.Cells[i + startRowIndex, j + ].Value = propertySelectors[j](items[i]);
}
}
}
}
}

2.在ABP的AppServer应用服务层调用:

        /// <summary>
/// 导出列表到Excel
/// </summary>
/// <param name="search">查询条件对象</param>
public AjaxResponse ExportListToExcel(ContractSearch search)
{
int rowCount = ;
List<ContractList> dtoList = Search(search, out rowCount, false);
string fileName = "List.xlsx";
string sheetName = "列表";
const int columnCount = ;
string[] header = new string[columnCount] { "签订日期", "编号", "价格", "付款方式", "执行期", "状态", "负责人" };
Func<ContractList, object>[] propertySelectors = new Func<ContractList, object>[columnCount] {
new Func<ContractList, object>(l => l.SignDateString),
new Func<ContractList, object>(l => l.Code),
new Func<ContractList, object>(l => l.CoalType),
new Func<ContractList, object>(l => l.TotalNumber),
new Func<ContractList, object>(l => l.TotalAmount),
new Func<ContractList, object>(l => l.PayMethods),
new Func<ContractList, object>(l => l.ValidPeriod),
new Func<ContractList, object>(l => l.ContractStatusName),
new Func<ContractList, object>(l => l.AdminName)
};
return ExcelExporter<ContractList>.GetFileResponse(fileName, sheetName, dtoList, header, propertySelectors);
}

abp中文件下载,将内存数据导出到Excel并下载的更多相关文章

  1. 将datagrid中数据导出到excel中 -------<<工作日志2014-6-6>>

    前台datagrid数据绑定 #region 导出到excel中    /// <summary>    /// 2014-6-6    /// </summary>    / ...

  2. 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel

    机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...

  3. Qt中将QTableView中的数据导出为Excel文件

    如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...

  4. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  5. Magic xpa 3.x很容易将数据导出到Excel中

    Magic xpa 3.x很方便的将表中数据导出到Excel文件中,还可以自动将表中数据生成各种图表. 通过使用自带的打印数据内部事即可实现. 1.首先将打印数据任务属性设置为“是”. 2.可使用主程 ...

  6. Asp.net网页中DataGridView数据导出到Excel

    经过上网找资料,终于找到一种可以直接将GridView中数据导出到Excel文件的方法,归纳方法如下: 1. 注:其中的字符集格式若改为“GB2312”,导出的部分数据可能为乱码: 导出之前需要关闭分 ...

  7. WPF-将DataGrid控件中的数据导出到Excel

    原文:WPF-将DataGrid控件中的数据导出到Excel 导出至Excel是非常常见,我们可以用很多类库,例如Aspose.NOPI.Interop,在这里我们使用微软自家的工具.我的WPF绑定的 ...

  8. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  9. 使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!

    一.需求 我们会遇到开发任务: 经理:小王,你来做一下把数据库里的数据导出到Excel中,一个表是一个sheet,不要一个表一个Excel. 小王:好的,经理.(内心一脸懵逼) 二.前期准备 首先我们 ...

随机推荐

  1. @synchronized(self)

    @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其 它线程访问,起到线程的保护 ...

  2. [one day one question] Vue单页面应用如何保证F5强刷不清空数据

    问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...

  3. SpringMVC的filter怎么使用Autowired依赖注入bean

      有的时候根据我们业务的需要,我们需要在web项目中定义一个自己的filter,并想在这个filter中使用@Autowired注入bean供我们使用.如果直接使用的话是不行的,需要我们在xml文件 ...

  4. scrapy_随机ip代理池

    什么是ip代理? 我们电脑访问网站,其实是访问远程的服务器,通过ip地址识别是那个机器访问了服务器,服务器就知道数据该返回给哪台机器,我们生活中所用的网络是局域网,ip是运营商随机分配的,是一种直接访 ...

  5. 1_mysql_认识

    什么是数据库? -- 数据                 -- 处理+存储 信息 -- 数据库              -- 存取数据 软件 本质是对文件系统的上层封装,通过软件去管理文件,管理数 ...

  6. 【转】布同:如何循序渐进学习Python语言

    大家都知道Python语言是一种新兴的编程语言.1989年,Python就由Guido van Rossum发明.Python一直发展态势很好. 原因有几点:1.跨平台性好.Linux.Windows ...

  7. zabbix监控-部署(一)

    zabbix之自动化监控-部署篇(一) 标签(空格分隔): linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 浅谈监控 监控命令 查看硬件的温度/风扇转 ...

  8. Mysql Innodb 锁机制

    latch与lock latch 可以认为是应用程序中的锁,可以称为闩锁(轻量级的锁) 因为其要求锁定的时间必须要非常短,若持续时间长,则会导致应用性能非常差,在InnoDB存储引擎中,latch又可 ...

  9. Codeforce A. Fair Game

    A. Fair Game time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  10. linux下磁盘占用达到100%了,找不到哪些大文件耗尽了磁盘

    Linux下的根分区使用率100%,但是查看/分区下的目录都不大,没有占用满,这该怎么处理? 重启是肯定有效的,目前处理情况:重新restart应用后,空间释放出来 1.lsof | grep del ...