如何写通用的list转Excel表格

如何写通用的list转Excel表格

编译环境

Asp.Net Core \ C#7.0 / WebApi

1.首先来一个核心的扩展类

上代码(核心代码)这里用到了反射

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using OfficeOpenXml;//EPPlus.Core包
using System.Reflection;

namespace ExportExcel
{
    public static class Helper
    {
        /// <summary>
        /// 导出excel
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="keyValues">key为列名</param>
        /// <returns></returns>
        public static byte[] ToExcel<T>(this List<T> list,Dictionary<string,string> keyValues)
        {
            //EPPlus.Core包
            using (ExcelPackage package = new ExcelPackage())
            {
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("sheet");
                int column = 1;//列
                foreach(string key in keyValues.Keys)
                {
                    worksheet.Cells[1, column].Value = key;
                    column++;
                }
                
                int row = 2;//行
                foreach(var date in list)
                {
                    column = 1;
                    //反射获取数据属性
                    PropertyInfo[] pi = date.GetType().GetProperties();
                    foreach(var value in keyValues.Values)
                    {
                        var info = pi.Where(e => e.Name == value).FirstOrDefault();
                        if(null != info)
                        {
                            worksheet.Cells[row, column].Value = info.GetValue(date);
                        }
                        else
                        {
                            worksheet.Cells[row, column].Value = "";
                        }
                        column++;
                    }
                    row++;
                }
                var content = package.GetAsByteArray();
                if(null == content)
                {
                    return null;
                }
                return content;
            }
        }
    }
}

2.其次就是如何调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace ExportExcel.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class ExportExcelController : ControllerBase
    {
        [HttpGet(nameof(ExportExcel))]
        public IActionResult ExportExcel2()
        {
            var list = new List<Student>();
            for(var i =0;i<10;i++)
            {
                list.Add(new Student
                {
                    Age = "12",
                    ClassName = "软件1702",
                    IdCard = "2134234234",
                    Name = "中宋"
                });
            }
            var keyValues = new Dictionary<string, string>();
            keyValues.Add("姓名","Name");
            keyValues.Add("班级", "ClassName");
            keyValues.Add("年龄", "Age");
            keyValues.Add("身份证号", "IdCard");
            var content =  list.ToExcel(keyValues);
            return File(content,"application/ms-excel",$"{Guid.NewGuid().ToString("N")}.xlsx");
        }
    }
}

3. 使用到的模型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ExportExcel
{
    public class Student
    {
        public string Name { get; set; }
        public string Age { get; set; }
        public string ClassName { get; set; }
        public string IdCard { get; set; }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了使用EasyExcel导出多重嵌套ListExcel模板,我们可以按照以下步骤进行操作: 1.首先,我们需要创建一个Excel模板,其中包含多个sheet页,每个sheet页对应一个指定的对象。在每个sheet页中,我们需要定义表头,以及需要导出的字段对应的列。 2.接下来,我们需要编一个通用的工具类,将List<?>这种结构化为List<List < String >>的形式。可以参考以下代码: ```java public class ExcelUtils { /** * 将List<?>化为List<List<String>>的形式 * * @param list 需要化的集合 * @param fields 对应的字段属性名,这里的顺序对应输出到excel表格中的顺序 * @param classType 对应的类型 * @return List<List < String>>的形式 */ public static List<List<String>> convertList(List<?> list, String[] fields, Class<?> classType) { List<List<String>> dataList = new ArrayList<>(); for (Object obj : list) { List<String> rowList = new ArrayList<>(); for (String field : fields) { try { Field f = classType.getDeclaredField(field); f.setAccessible(true); Object value = f.get(obj); rowList.add(value == null ? "" : value.toString()); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } dataList.add(rowList); } return dataList; } } ``` 3.在导出Excel时,我们可以按照以下步骤进行操作: ```java // 创建ExcelWriter对象 ExcelWriter writer = EasyExcel.write(fileName).build(); // 遍历每个sheet页,将数据Excel中 for (int i = 0; i < sheetList.size(); i++) { // 获取当前sheet页的数据 List<?> dataList = sheetList.get(i).getDataList(); // 获取当前sheet页对应的对象类型 Class<?> classType = sheetList.get(i).getClassType(); // 获取当前sheet页对应的字段属性名 String[] fields = sheetList.get(i).getFields(); // 将List<?>化为List<List<String>>的形式 List<List<String>> data = ExcelUtils.convertList(dataList, fields, classType); // 入当前sheet页的数据 writer.write(data, i, 0); } // 关闭ExcelWriter对象 writer.finish(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菩提树下敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值