一个Excel导出类的实现过程(一):泛型与反射

对数据进行导出要求很常见,我们需要通用便离不了泛型和反射。这里从伪码开始,逐步加入业务需求、场景及边界,最终使用NPOI组件实现。

准备好业务中的实体类准备好:

public class Person
{
    public Int32 ID { get; set; }
    public String Name { get; set; }
    public DateTime Birth { get; set; }
    public Double Salary { get; set; }
}

接着是函数原型:

Export<T>(IList<T> records)

接下来我们开始干活。首先是PropertyInfo数组可以通过Type.GetProperties()及其各种重载方法实现,然后是PropertyInfo.GetValue()方法可以从类的实例中获取值,第一个原型如下:

static void Main(string[] args)
{
    List<Person> persons = new List<Person>();
    persons.Add(new Person { ID = 1, Name = "Rattz", Birth = new DateTime(1980, 10, 1), Salary = 20.2D });
    persons.Add(new Person { ID = 2, Name = "Mike", Birth = new DateTime(1988, 2, 15), Salary = 20.2D });

    Export<Person>(persons);
}

static void Export<T>(IList<T> records)
{
    if (records == null)
        throw new ArgumentNullException("records");

    PropertyInfo[] props = typeof(T).GetProperties(); //获取属性
    for (Int32 i = 0; i < props.Length; i++)
    {
        Console.Write(props[i].Name);
        Console.Write("\t");
    }
    Console.WriteLine();

    foreach (var record in records)
    {
        for (Int32 i = 0; i < props.Length; i++)
        {
            Object value = props[i].GetValue(record, null); //获取值
            Console.Write(value);
            Console.Write("\t");
        }
        Console.WriteLine();
    }
}

这里只是缩进与打印,我们可以处理很多其他事情;同时这里records只有两条,实际业务中超过65536条记录的导出要求也会出现,在介绍与使用NPOI的过程中我们一并处理。

转载于:https://www.cnblogs.com/Jusfr/archive/2013/05/16/3082091.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值