• C#导出泛型IList到Excel


     1 using System;
     2 using System.Collections.Generic;
     3 using System.IO;
     4 using System.Linq;
     5 using System.Reflection;
     6 using System.Text;
     7 using System.Threading.Tasks;
     8 using System.Web;
     9 
    10 namespace WebApp.Test
    11 {
    12     /// <summary>
    13     /// List<T>导出类
    14     /// </summary>
    15     /// <typeparam name="T">列表中的元素类型</typeparam>
    16     public class ExcelHelperForIList<T>
    17     {
    18         /// <summary>
    19         /// 泛型导出Excel
    20         /// </summary>
    21         /// <param name="lt">要导出的List集合</param>
    22         /// <param name="fileName">文件名</param>
    23         /// <param name="fieldNames">导出的字段名()</param>
    24         /// <param name="showNames">Excel标题行(需与FieldNames对应)</param>
    25         /// <returns></returns>
    26         public static string CreateAdvExcel(IList<T> lt, string fileName, string[] fieldNames, string[] showNames)
    27         {
    28             StringBuilder builder = new StringBuilder();
    29             Random rn = new Random();
    30             string name = fileName;
    31             //通过反射得到对象的属性集合  
    32             System.Reflection.PropertyInfo[] myPropertyInfo = lt.First().GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
    33             int i = 0, j;
    34             for (int m = 0; m < fieldNames.Length; m++)
    35             {
    36                 //遍历属性集合生成excel的表头标题  
    37                 for (i = 0, j = myPropertyInfo.Length; i < j; i++)
    38                 {
    39                     System.Reflection.PropertyInfo pi = myPropertyInfo[i];
    40                     string headname = pi.Name;//单元格头部
    41                     if (headname == fieldNames[m])
    42                     {
    43                         builder.Append(showNames[m]);
    44                         builder.Append("	");
    45                     }
    46                 }
    47             }
    48             builder.Append("
    ");
    49             //遍历集合生成excel的行集数据
    50             foreach (T item in lt)
    51             {
    52                 if (lt == null)
    53                 {
    54                     continue;
    55                 }
    56                 for (int m = 0; m < fieldNames.Length; m++)
    57                 {
    58                     for (i = 0, j = myPropertyInfo.Length; i < j; i++)
    59                     {
    60                         PropertyInfo pi = myPropertyInfo[i];
    61                         if (pi.Name == fieldNames[m])
    62                         {
    63                             string str = string.Format("{0}", pi.GetValue(item, null)).Replace("
    ", "");
    64                             str = str.Replace("&nbsp", " ");
    65                             if (str == "")
    66                             {
    67                                 builder.Append("	");
    68                             }
    69                             else
    70                             {
    71                                 builder.Append(str + "	");//横向跳到另一个单元格
    72                             }
    73                         }
    74                     }
    75                 }
    76 
    77                 builder.Append("
    ");//换行
    78             }
    79             StringWriter sw = new StringWriter();
    80             sw.WriteLine(builder);
    81             sw.Close();
    82 
    83             HttpContext.Current.Response.Clear();
    84             // 指定返回的是一个不能被客户端读取的流,必须被下载
    85             HttpContext.Current.Response.ContentType = "application/ms-excel";
    86             HttpContext.Current.Response.Charset = "UTF-8";
    87             HttpContext.Current.Response.Buffer = true;
    88             HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
    89             HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.xls", name));
    90             HttpContext.Current.Response.Write(builder);
    91             HttpContext.Current.Response.End();
    92             return builder.ToString();
    93         }
    94     }
    95 }

    在网上找了一些方法但是最终整理成这个类,代码可能有冗余,尚在研究当中,同时也希望同志们指点一二。

  • 相关阅读:
    fatal: HttpRequestException encountered解决方法
    es进行聚合操作时提示Fielddata is disabled on text fields by default
    scrapy+mongodb报错 TypeError: name must be an instance of str
    运行scrapy保存图片,报错ValueError: Missing scheme in request url: h
    yii框架基本操作
    jQuery 获取屏幕高度、宽度
    ajax xmlhttprequest status
    php——composer 1、安装使用
    php 钩子函数原理 解析
    curl http_code状态码 含义
  • 原文地址:https://www.cnblogs.com/YangFei-wow/p/3459839.html
Copyright © 2020-2023  润新知