zoukankan      html  css  js  c++  java
  • abp中文件下载,将内存数据导出到Excel并下载

    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 = 500;
                    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, 2, dtoList, propertySelectors);
    
                            for (var i = 1; 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 = 0; i < headerTexts.Length; i++)
                {
                    AddHeader(sheet, i + 1, headerTexts[i]);
                }
            }
    
            public static void AddHeader(ExcelWorksheet sheet, int columnIndex, string headerText)
            {
                sheet.Cells[1, columnIndex].Value = headerText;
                sheet.Cells[1, 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 = 0; i < items.Count; i++)
                {
                    for (var j = 0; j < propertySelectors.Length; j++)
                    {
                        sheet.Cells[i + startRowIndex, j + 1].Value = propertySelectors[j](items[i]);
                    }
                }
            }
        }
    }

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

            /// <summary>
            /// 导出列表到Excel
            /// </summary>
            /// <param name="search">查询条件对象</param>
            public AjaxResponse ExportListToExcel(ContractSearch search)
            {
                int rowCount = 0;
                List<ContractList> dtoList = Search(search, out rowCount, false);
                string fileName = "List.xlsx";
                string sheetName = "列表";
                const int columnCount = 11;
                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);
            }
  • 相关阅读:
    Java 泛型初识
    Java 设计模式之装饰模式
    深入理解Java 虚拟机 之垃圾收集器与内存分配策略
    (转)MySQL字段类型
    Eclipse 远程调试
    深入理解Java 虚拟机 之自动内存管理
    JAVA对象向上转型和向下转型
    JavaSE(二)之变量与常量、运算符、类型转换
    Maven(四)之archetype插件的使用
    Hibernate(五)之一对多&多对一映射关系
  • 原文地址:https://www.cnblogs.com/xytmj/p/7607110.html
Copyright © 2011-2022 走看看