A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

运用到的相关知识:
    1)使用NPOI创建Excel文件并写入数据

    2)泛型

    3)特性和反射



从最主要的一个函数说起:
    public static void ExportDataToExcelFile<T>(string strFilePath, List<T> data)
            where T : class
    1)函数的功能:将一个泛型List集合中的数据导出到一个Excel文件中去

    2)第一个参数指定了Excel文件的路径,文件不存在则创建该文件,存在则覆盖

    3)data是一个List集合,其中类型参数T要求是一个类(不知道能不能约束它必须拥有某些特性)

    4)这里也可以不使用特性,只是反射出属性来,但是为了获得更多的信息(工作表名称、列的名称)我还是加上了特性



程序中用到的两个自定义特性类:
ExcelSheetAttribute特性类:
[AttributeUsage(AttributeTargets.Class)]
public sealed class ExcelSheetAttribute : Attribute
{
    public ExcelSheetAttribute(string sheetName)
    {
        SheetName = sheetName;
    }

    private string _SheetName;

    public string SheetName
    {
        get { return _SheetName; }
        set { _SheetName = value; }
    }
}
说明:该特性只能使用在class上面,如果为某个类使用该特性必须指定一个位置参数sheetName,该参数最终将指示工作表的名称,并不是要求函数ExportDataToExcelFile中的类型参数T必须运用该特性,运用了则使用提供的名称,没有使用该特性默认名称为“sheet1”。
ExcelColumn特性类:
[AttributeUsage(AttributeTargets.Property)]
public sealed class ExcelColumn : Attribute
{
    public ExcelColumn(CellType type=CellType.STRING)   //默认是字符串类型
    {
        ColumnType = type;
    }

    private CellType _ColumnType;
    private string _ColumnName;

    public CellType ColumnType
    {
        get { return _ColumnType; }
        set { _ColumnType = value; }
    }

    public string ColumnName
    {
        get { return _ColumnName; }
        set { _ColumnName = value; }
    }
}

说明:该特性只能使用在属性上,其中包含两个属性ColumnType和ColumnName,其中ColumnType的类型是NPOI中提供表示Excel表格中单元格数据类型的一个枚举,在写入Excel文件时会使用该特性属性,而ColumnName则表示的是最终在Excel文件的头部显示的信息,表头名称。


一个使用了以上两个自定义特性的类示例:
    [ExcelSheet("学生信息")]
    public class StudentSheet
    {
        [ExcelColumn(CellType.NUMERIC,ColumnName="编号")]
        public int ID { get; set; }

        [ExcelColumn(CellType.STRING,ColumnName="姓名")]
        public string Name { get; set; }

        [ExcelColumn(CellType.STRING,ColumnName="性别")]
        public string Sex { get; set; }

        [ExcelColumn(ColumnName = "生日")]
        public string Birthdate { get; set; }

        [ExcelColumn(ColumnName = "学习日期")]
        public string Studydate { get; set; }

        [ExcelColumn(CellType.STRING,ColumnName="地址")]
        public string Address { get; set; }

        [ExcelColumn(CellType.STRING, ColumnName = "电子邮件")]
        public string Email { get; set; }

        [ExcelColumn(CellType.STRING, ColumnName = "电话")]
        public string Telephone { get; set; }
    }


说明:在具体使用的时候我们只需要定义这样的一个类,在类和属性上面添加适当的特性信息,再调用上面提到过的函数,就能拿到我们想要的数据,这里属性定义的顺序将决定最后Excel文件中各个列的顺序。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马