黑马程序员技术交流社区

标题: 数据库中的数据导出到Excel文件中(NPOI)(一) [打印本页]

作者: 吴伟    时间: 2012-12-17 18:55
标题: 数据库中的数据导出到Excel文件中(NPOI)(一)
运用到的相关知识:
    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文件中各个列的顺序。

作者: 许庭洲    时间: 2012-12-17 19:55
值得学习ing!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2