zoukankan      html  css  js  c++  java
  • C#_.NetFramework_Web项目_EXCEL数据导出

    【推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出

    项目需引用NPOI的NuGet包:

    A-2:EXCEL数据导出--Web项目--C#代码导出:

    /// <summary>
        /// EXCEL帮助类
        /// </summary>
        /// <typeparam name="T">泛型类</typeparam>
        /// <typeparam name="TCollection">泛型类集合</typeparam>
        public class ExcelHelp<T, TCollection> where T : new() where TCollection : List<T>, new()
        {
            //http请求Request对象
            public static HttpRequest baseRequest = HttpContext.Current.Request;
            //http请求Response对象
            public static HttpResponse baseResponse = HttpContext.Current.Response;/// <summary>
            /// 将数据导出EXCEL
            /// </summary>
            /// <param name="columnNameAndShowNameDic">列名+显示名</param>
            /// <param name="tColl">数据集(tColl里的类属性名必须和字典中的列名一致)</param>
            public static void ExportExcelData(Dictionary<string, string> columnNameAndShowNameDic, TCollection tColl)
            {
                WorkBook workbook = WorkBook.CreateNew();
                WorkSheet worksheet = workbook.Sheets["sheet1"];
    
                List<string> columnNameList = columnNameAndShowNameDic.Keys.ToList();
                List<string> showNameList = columnNameAndShowNameDic.Values.ToList();
                //暂定26行
                string[] zm = new string[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
                //设置首列显示
                for (var i = 0; i < columnNameList.Count; i++)
                {
                    worksheet.Cells[zm[i] + "1"].Value = showNameList[i];
                    //加粗
                    worksheet.Cells[zm[i] + "1"].Style.Font.Bold = true;
                }
                for (int i = 0; i < tColl.Count; i++)
                {
                    for (int j = 0; j < columnNameList.Count; j++)
                    {
                        worksheet.Cells[zm[j] + (i + 2)].Value = getPropertyValue(tColl[i], columnNameList[j]);
                    }
                }
                byte[] buffer = workbook.SaveAsBytes();
                baseResponse.Clear();
                baseResponse.Buffer = true;
                baseResponse.ContentEncoding = System.Text.Encoding.UTF8;
                //baseResponse.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                baseResponse.ContentType = "application/vnd.ms-excel";
                //设置导出文件名
                baseResponse.AddHeader("content-disposition", "attachment;  filename=" + "MaintainReport" + ".xlsx");
                baseResponse.AddHeader("Content-Length", buffer.Length.ToString());
    
                baseResponse.BinaryWrite(buffer);
                baseResponse.Flush();
                baseResponse.End();
            }
            /// <summary>
            /// 获取属性值
            /// </summary>
            /// <param name="t">T对象实例</param>
            /// <param name="propertyName">属性名</param>
            /// <returns></returns>
            public static string getPropertyValue(T t, string propertyName)
            {
                PropertyInfo info = t.GetType().GetProperty(propertyName);
                //获取属性值转换暂设置如下字段,可根据实际情况添加
                if (info.PropertyType == typeof(DateTime))
                {
                    return Convert.ToDateTime(info.GetValue(t)).ToString("yyyy-MM-dd HH:mm");
                }
                return info.GetValue(t).ToString();
            }
        }
  • 相关阅读:
    Volatile关键字的解读
    JVM内存模型
    Redis为何是单线程的
    乐观锁&CAS问题
    String为什么要设置成Final类型
    后端开发之光!Django应用的容器化部署实践~
    一小时完成后台开发:DjangoRestFramework开发实践
    Django快速开发实践:Drf框架和xadmin配置指北
    Django应用部署:nginx+uwsgi方式
    Python踩坑:类与类对象类型参数传递与使用
  • 原文地址:https://www.cnblogs.com/lxhbky/p/11759606.html
Copyright © 2011-2022 走看看