动态列 Excel 导出

/// <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;

   }

  }

 

posted on 2017-03-30 17:47  fiftha  阅读(1819)  评论(0编辑  收藏  举报