/// <summary>
/// 导出数据通用属性 需在属性进行标记
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Parameter | AttributeTargets.Property)]
public class ExportToExcelAttribute : Attribute
{
  private string _columnName;
  private int _width = 19;

  public ExportToExcelAttribute(string columnName)
  {
    this._columnName = columnName;
  }

  public ExportToExcelAttribute(string columnName, int columnWidth)
  {
    this._columnName = columnName;
    this._width = columnWidth;
  }

  public string ColumnName { get { return _columnName; } }
  public int ColumnWidth { get { return _width; } }

}

public class ClassA

{

int id =0;

string name=string.Empty;

  [ExportToExcel("ID", 25)]
  public int Id
  {
    get { return Id; }
    set { Id= value; }
  }

  [ExportToExcel("Name", 25)]
  public int Id
  {
    get { return Id; }
    set { Id= value; }
  }

}

public class ExcelHelper

{

  public void CreateReportToExcel()

  {

    var data = new List<ClassA>()

    {

      new ClassA(){Id=1,Name="张三“},new ClassA(){Id=2,Name="张四”}

    };

    var expressList = new List<Expression<Func<ClassA, object>>>() {{m=>m.Id},{m=>m.Name}};

    Aspose.Cells.Workbook workbook=GetExportWorkbook<ClassA>(expressList,data,"ExcelSheet1");

    

    Response.BinaryWrite(workbook.SaveToStream().ToArray());
    Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode("" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls", System.Text.Encoding.UTF8) + "\"");
    Response.ContentType = "application/ms-excel";

  }

  /// <summary>
  /// 数据导出到excel通用方法
  /// </summary>
  /// <typeparam name="T"></typeparam>
  /// <param name="expressList"></param>
  /// <param name="datas"></param>
  /// <param name="WorksheetName"></param>
  /// <returns></returns>
  public static Workbook GetExportWorkbook<T>(List<Expression<Func<T, object>>> expressList, List<T> datas, string WorksheetName)
  {
  List<PropertyInfo> proList = new List<PropertyInfo>();//字段属性集合
  PropertyInfo pro;
  ExportToExcelAttribute att;

  Workbook work = new Workbook();
  work.Worksheets.Clear();
  Worksheet sheet = null;

  if (datas.Count > 0)
  {
    work.Worksheets.Add(WorksheetName);
    sheet = work.Worksheets[0];
    sheet.Cells.SetRowHeight(0, 30);
    int i = 0;
    foreach (var item in expressList)
    {
      pro = GetProperty(item);
      proList.Add(pro);
      att = pro.GetCustomAttribute<ExportToExcelAttribute>();
      sheet.Cells[0, i++].PutValue(att.ColumnName);
      sheet.Cells.SetColumnWidth(i - 1, att.ColumnWidth);
    }

    //单元格
    Cells cells = sheet.Cells;
    Style style1 = work.Styles[work.Styles.Add()];
    style1.HorizontalAlignment = TextAlignmentType.Center;    
    style1.Font.Name = "宋体";
    style1.Font.Size = 11;
    style1.IsLocked = true;
    style1.Font.IsBold = true;

    int n = 1;
      foreach (T item in datas)
      {
        int j = 0;
        foreach (var p in proList)
        {  
          sheet.Cells[n, j++].PutValue(p.GetValue(item));
        }
        n += 1;
      }
     }

    return work;

   }

  }

动态列 Excel 导出的更多相关文章

  1. Java实现大批量数据导入导出(100W以上) -(三)超过25列Excel导出

    前面一篇文章介绍大数据量导出实现: Java实现大批量数据导入导出(100W以上) -(二)导出 这篇文章在Excel列较少时,按以上实际验证能很快实现生成.但如果列较多时用StringTemplat ...

  2. C# 使用Epplus导出Excel [2]:导出动态列数据

    C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...

  3. 数据导出Excel,动态列

    今天碰到一个需求,要求将用户回答的问卷及问题导出Excel表格,问卷对应的问题数量不一致,需要动态添加列表头,简单记录. 要导出Excel需要添加poi.jar包 用户-问卷实体(固定列): pack ...

  4. 【C#】Excel导出合并行和列并动态加载行与列

    简单的Excel导出比较好做,只要设置表头,循环在表格中赋值添加数据即可,但是如果表头是不固定的,并且个数是不确定的,这就需要根据查询出数据的特点来添加导出了. 导出效果图: 如上图所示,商品的个数是 ...

  5. 记React+.NetCore API实现动态列导出

    1.效果演示 2.用到的第三方类库 前端:React,Dva,Antd 后端:ASP.NET CORE,System.Linq.Dynamic.Core,EPPlus.Core 3.基本思路 第一:E ...

  6. easypoi导出动态表头excel

    easypoi导出动态表头excel 1: springBoot项目maven依赖: <dependency> <groupId>cn.afterturn</groupI ...

  7. 数据的动态合并和导出至EXCEL

    最近一段时间都在处理数据的动态合并和导出EXCEL的问题,写个demo记录下,希望和我碰到同样问题的博友可以顺利解决:后面会提供demo下载链接. (VS2012,ASP.NET) 一.主要解决以下问 ...

  8. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  9. asp.net(C#) Excel导出类 导出.xls文件

    ---恢复内容开始--- using Microsoft.Office.Interop.Excel; 针对office 2003需添加引用Microsoft   Excel   11.0   Obje ...

随机推荐

  1. k8s PersistentVolume hostpath 简单使用

    kubernets host PersistentVolume 测试 因为yaml 格式的问题 ,我修改为了json 创建 pv pv.json { "kind": "P ...

  2. Android开发入门

    教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...

  3. QQ空间点赞代码

    jQuery("a.qz_like_btn_v3[data-clicklog='like']").each(function(index,item){ console.log(it ...

  4. Bootstrap-CL:超大屏幕

    ylbtech-Bootstrap-CL:超大屏幕 1.返回顶部 1. Bootstrap 超大屏幕(Jumbotron) 本章将讲解 Bootstrap 支持的另一个特性,超大屏幕(Jumbotro ...

  5. mysql-9索引

    mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度. 索引分为单列索引和组合索引. 单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索 ...

  6. oracle 11g RAC 的一些基本概念(四)

    RAC   在Grid Infrastructure安装完以后,我们把注意力转移到集群上的Oracle软件的安装上来.我们看到,Grid Infrasctructure提供了运行RAC的框架,包括集群 ...

  7. Python普通方法、静态方法、类方法

    开始 # -*-coding:utf-8-*- # 普通方法,类方法,静态方法的区别 __metaclass__ = type class Tst: name = 'tst' data = 'this ...

  8. urllib2的GET和POST请求(五)

    urllib2默认只支持HTTP/HTTPS的GET和POST方法 urllib.urlencode() urllib 和 urllib2 都是接受URL请求的相关模块,但是提供了不同的功能.两个最显 ...

  9. snmp获取设备相关管理信息

    在本文中,作者将向我们展示如何用snmp代理监视网络设备,甚至发送软件警告. 网络上很多代理在为我们服务.只要我们开启UDP/161,162端口,这些代理就会以Management Informati ...

  10. 2.spring整合ehcache 注解实现查询缓存,并实现实时缓存更新或删除

    转自:http://www.importnew.com/23358.html 写在前面:上一篇博客写了spring cache和ehcache的基本介绍,个人建议先把这些最基本的知识了解了才能对今天主 ...