Epplus:导出Excel

Posted 安挚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Epplus:导出Excel相关的知识,希望对你有一定的参考价值。

看到其它大神的Epplus导出Excel,结合写出符合自己需求的将导出数据到Excel,给其它人参考一下,也可以学习http://www.cnblogs.com/caofangsheng/p/6149843.html#3576824灰太狼的梦想(大神)的教程。

视图:

1 <input type="button" value="订单导出" class="baseExport baseBtn" style="margin-right: 12px;" onclick="ExportToExcel()" />
2 
3 <script>
4 function ExportToExcel() {
5 document.location = "/Order/ExportToExcel";
6 }
<script/>

 

控制器:

1 public FileContentResult ExportToExcel()
2 {
3 var where = "SQL语句 ";
4 List<AmazonOrdersCollectView> Export = SQLHelper.GetCollectReader(where);//查出后台数据
5 string[] columns = { "amazon_order_id", "purchase_date", "sales_channel", "buyer_name", "buyer_email", "buyer_phone_number", "total_Number"};//定义Excel列项
6 byte[] filecontent = ExcelExportHelper.ExportExcel(Export, "", false, columns);
7 return File(filecontent,ExcelExportHelper.ExcelContentType,"text.xlsx");
8 }

 

类:

  1 using OfficeOpenXml;
  2 using OfficeOpenXml.Style;
  3 using System;
  4 using System.Collections.Generic;
  5 using System.ComponentModel;
  6 using System.Data;
  7 using System.Linq;
  8 using System.Web;
  9 
 10 namespace Order_Management.Library.Export
 11 {
 12     public class ExcelExportHelper
 13     {
 14         public static string ExcelContentType
 15         {
 16             get
 17             {
 18                 return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
 19             }
 20         }
 21 
 22         /// <summary>
 23         /// List转DataTable
 24         /// </summary>
 25         /// <typeparam name="T"></typeparam>
 26         /// <param name="data"></param>
 27         /// <returns></returns>
 28         public static DataTable ListToDataTable<T>(List<T> data)
 29         {
 30             PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
 31             DataTable dataTable = new DataTable();
 32             for (int i = 0; i < properties.Count; i++)
 33             {
 34                 PropertyDescriptor property = properties[i];
 35                 dataTable.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
 36             }
 37             object[] values = new object[properties.Count];
 38             foreach (T item in data)
 39             {
 40                 for (int i = 0; i < values.Length; i++)
 41                 {
 42                     values[i] = properties[i].GetValue(item);
 43                 }
 44                 dataTable.Rows.Add(values);
 45             }
 46             return dataTable;
 47         }
 48 
 49         /// <summary>
 50         /// 导出Excel
 51         /// </summary>
 52         /// <param name="dataTable">数据源</param>
 53         /// <param name="heading">工作簿Worksheet</param>
 54         /// <param name="showSrNo">是否显示行编号</param>
 55         /// <param name="columnsToTale">要导出的列</param>
 56         /// <returns></returns>
 57         public static byte[] ExportExcel(DataTable dataTable,string heading="",bool showSrNo=false,params string[] columnsToTale)
 58         {
 59             byte[] reslut = null;
 60             using (ExcelPackage package=new ExcelPackage())
 61             {
 62                 ExcelWorksheet workSheet  = package.Workbook.Worksheets.Add(string.Format("{0}Data", heading));
 63                 int startRowFrom = string.IsNullOrEmpty(heading) ? 1 : 3;
 64                 if (showSrNo)
 65                 {
 66                     DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int));
 67                     dataColumn.SetOrdinal(0);
 68                     int index = 1;
 69                     foreach (DataRow item in dataTable.Rows)
 70                     {
 71                         item[0] = index;
 72                         index++;
 73                     }
 74                 }
 75                 workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true);
 76                 int columnIndex = 1;
 77                 foreach (DataColumn item in dataTable.Columns)
 78                 {
 79                     ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex];
 80                     int maxLength = columnCells.Max(cell => cell.Value == null ? 1 : cell.Value.ToString().Count());
 81                     if (maxLength<150)
 82                     {
 83                         workSheet.Column(columnIndex).AutoFit();
 84                     }
 85                     columnIndex++;
 86                 }
 87                 using (ExcelRange r=workSheet.Cells[startRowFrom,1,startRowFrom,dataTable.Columns.Count])
 88                 {
 89                     r.Style.Font.Color.SetColor(System.Drawing.Color.White);
 90                     r.Style.Font.Bold = true;
 91                     r.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
 92                     r.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.Fromhtml("#1fb5ad"));
 93                 }
 94                 using (ExcelRange r=workSheet.Cells[startRowFrom+1,1,startRowFrom+dataTable.Rows.Count,dataTable.Columns.Count])
 95                 {
 96                     r.Style.Border.Top.Style = ExcelBorderStyle.Thin;
 97                     r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
 98                     r.Style.Border.Left.Style = ExcelBorderStyle.Thin;
 99                     r.Style.Border.Right.Style = ExcelBorderStyle.Thin;
100                     r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black);
101                     r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black);
102                     r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black);
103                     r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black);
104                 }
105                 for (int i = 0; i >= dataTable.Columns.Count - 1; i++)
106                 {
107                     if (i == 0 && showSrNo)
108                     {
109                         continue;
110                     }
111                     if (!columnsToTale.Contains(dataTable.Columns[i].ColumnName))
112                     {
113                         workSheet.DeleteRow(i + 1);
114                     }
115                 }
116                 if (!String.IsNullOrEmpty(heading))
117                 {
118                     workSheet.Cells["A1"].Value = heading;
119                     workSheet.Cells["A1"].Style.Font.Size = 20;
120                     workSheet.InsertColumn(1, 1);
121                     workSheet.InsertRow(1, 1);
122                     workSheet.Column(1).Width = 5;
123                 }
124                 reslut = package.GetAsByteArray();
125             }
126             return reslut;
127         }
128 
129         /// <summary>
130         /// 导出Excel
131         /// </summary>
132         /// <typeparam name="T"></typeparam>
133         /// <param name="data"></param>
134         /// <param name="heading"></param>
135         /// <param name="isShowSlNo"></param>
136         /// <param name="ColumnsToTake"></param>
137         /// <returns></returns>
138         public static byte[] ExportExcel<T>(List<T> data, string heading = "", bool isShowSlNo = false, params string[] ColumnsToTake)
139         {
140             return ExportExcel(ListToDataTable<T>(data), heading, isShowSlNo, ColumnsToTake);
141         }
142     }
View Code
效果图:
以上就是我的分享,欢迎各路大神一起探讨学习!

以上是关于Epplus:导出Excel的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用Epplus导出数据到Excel

C# NPOI导出Excel和EPPlus导出Excel比较

导出Excel之Epplus使用教程2(样式设置)

导出Excel之Epplus使用教程3(图表设置)

Epplus:导出Excel

使用 EPPlus 将 DataTable 导出到 Excel