写入数据到Excel

本文介绍了一个使用NPOI和Newtonsoft库实现的批量导出Excel的方法。该方法能够将IList<T>类型的对象集合导出为Excel文件,单个文件最大支持65536行数据。如果数据量超过限制,建议转为CSV格式。

---------------------DownloadExcelAsStreame<T>(IList<T> param, string sheetname=null) where T : new()------------------

依赖:

  |-NPOI

  |-Newtonsoft

备注:

这里为了方便,么有自己定义Attribute,用Josn的Attribute来给类型带入参数。

注意:

这个版本的NPOI写入Excel,单个文件最多只能写入65536行,如果不满足需要可以转写入CVS(CVS不限制大小)

--------------------------------------------------------------------------------------------------------------------------------

 1  public static MemoryStream DownloadExcelAsStreame<T>(IList<T> param, string sheetname=null) where T : new()
 2  {
 3       if (param == null || param.Count < 1)
 4                 return null;
 5             int rowsCount = param.Count(),columnCount = param.FirstOrDefault().GetType().GetProperties().Count(p => p.PropertyType.IsPublic);
 6             var tp= typeof (T);
 7             var tpattr = tp.GetCustomAttribute<JsonObjectAttribute>();
 8             if (tpattr == null)
 9                 return null;
10             HSSFWorkbook workbook = new HSSFWorkbook();
11             HSSFSheet sheet = workbook.CreateSheet(sheetname?? tpattr.Id) as HSSFSheet;
12             HSSFRow headerRow = sheet.CreateRow(0) as HSSFRow;
13             List<PropertyInfo> pts = tp.GetProperties().Where(p => p.PropertyType.IsPublic).Select(o => o).ToList();
14             string[] atv = pts.ConvertAll(ii =>
15             {
16                 var jsonPropertyAttribute = ii.GetCustomAttribute<JsonPropertyAttribute>();
17                 if (jsonPropertyAttribute != null)
18                     return jsonPropertyAttribute.PropertyName;
19                 return string.Empty;
20             }).ToArray();
21             var me = new MemoryStream();
22             int paddingrow = 0;
23             int rowindex = 0;
24             for (int nn = 0; nn < columnCount; nn++)
25             {
26                 if (!string.IsNullOrEmpty(atv[nn]))
27                 {
28                     headerRow.CreateCell(rowindex, NPOI.SS.UserModel.CellType.String).SetCellValue(atv[nn] ?? pts[nn].Name);
29                     rowindex++;
30                 }
31             }
32             paddingrow += 1;
33             rowindex = 0;
34             for (int r = 0; r < rowsCount; r++)
35             {
36                 HSSFRow cntRow = sheet.CreateRow(r + paddingrow) as HSSFRow;
37                 for (int pj = 0; pj < columnCount; pj++)
38                 {
39                     if (!string.IsNullOrEmpty(atv[pj]))
40                     {
41                         cntRow.CreateCell(rowindex, NPOI.SS.UserModel.CellType.String)
42                             .SetCellValue(pts[pj].GetValue(param[r]) != null
43                                 ? pts[pj].GetValue(param[r]).ToString()
44                                 : "");
45                         rowindex++;
46                     }
47                 }
48                 rowindex =0;
49             }
50             workbook.Write(me);
51             workbook.Close();
52             return me;
53         }

 

转载于:https://www.cnblogs.com/Thancoo/p/bulkWriteToExcel.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值