Warship+NPOI导入导出组件介绍【对象化】

谁都会走 提交于 2020-01-18 06:17:22

一、概述

1)标准导入导出指基于标准组件即可完成导入导出功能,不需要进行扩展开发。同时导入导出都是实体化的,可以通过实体操作来进行Excel的操作。

2)特性介绍

 2.1)ExcelHead:ExcelHead为属性对应Excel的单元格头部,通过该特性可以锁定Excel里面的单元格进行属性值设置,同时对Excel进行锁定、隐藏、头部颜色、整列颜色、列类型(文本、选项、日期、金额等)、格式设置

 2.2)Required:添加Required特性即为必填校验,可设置校验不通过时的提示信息ErrorMessage

 2.3)Length:添加Length特性即进行长度校验,可设置校验不通过时的提示信息ErrorMessage

 2.4)Range:添加Range特性即进行范围控制,可设置校验不通过时的提示信息ErrorMessage

 2.5)Format:添加Format特性即限制字段的输入格式,可设置校验不通过时的提示信息ErrorMessage,格式校验内置4个标准:邮箱、电话、移动电话、身份证,如果内置的不够,可通过正则进行设置,使用特性的重载函数即可

3)ExcelGlobalDTO介绍

 3.1)ExcelGlobalDTO为Excel级别的全局信息,包含Excel的文件信息、所有Sheet起始行、所有Sheet起始列、Sheet实体集合

 3.2)可通过ExcelGlobalDTO设置跟Excel的Sheet相关的设置,如禁用Sheet、设置活动的Sheet

4)ExcelSheetModel介绍

 4.1)ExcelSheetModel为Sheet级别的信息,包含Sheet的名称(SheetName)、序号(SheetIndex)、起始行(StartRowIndex)、起始列(StartColumnIndex)、说明(AreaBlock)

 4.2)导入Excel后,可获取到Sheet头部集合SheetHeadList、Sheet实体集合SheetEntityList

 4.3)可设置Sheet内列的选项值,通过ColumnOptions进行单元格输入的限制

5)ExcelRowModel介绍

 5.1)所有导入导出DTO对象必须继承ExcelRowModel,ExcelRowModel为组件级的封装

 5.2)ExcelRowModel为Excel行对象,里面包含所有行相关的信息,如行号、实体中未定义列的单元格信息集合

 5.3)可以通过实体对ExcelRowModel中的属性进行样式设置(RowStyleSet)、是否删除行设置(IsDeleteRow)、动态列设置(SetDynamicColumns)

 5.3)当调用组件导入后,可以通过ExcelRowModel的ColumnErrorMessage获取到本行内单元格验证不通过信息,同时也可以基于组件以外的业务校验向ColumnErrorMessage追加异常信息,导出的时候会向单元格上打批注。

 5.4)也可通过ExcelGlobalDTO的GetColumnErrorMessages获取Excel的所有验证不通过信息。

二、代码示例

代码示例

/// <summary>
/// 合同
/// </summary>
[Serializable]
public class ContractImportDTO : ExcelRowModel
{

    /// <summary>
    /// 合同名称
    /// </summary>
    [ExcelHead("合同名称", IsLocked = false, IsHiddenColumn = false, ColumnWidth = 8)]
    [Required(ErrorMessage = "合同名称必填")]
    [Length(100, ErrorMessage = "长度不能超过100")]
    public string Name { get; set; }

    /// <summary>
    /// 合同编码
    /// </summary>
    [ExcelHead("合同编码", IsLocked = false, IsHiddenColumn = false, ColumnWidth = 8)]
    [Required(ErrorMessage = "合同名称必填")]
    [Length(100, ErrorMessage = "长度不能超过100")]
    public string Code { get; set; }

    /// <summary>
    /// 合同编码
    /// </summary>
    [ExcelHead("甲方单位", IsLocked = false, IsHiddenColumn = false, ColumnWidth = 8)]
    [Required(ErrorMessage = "合同名称必填")]
    [Length(100, ErrorMessage = "长度不能超过100")]
    public string JfProvider { get; set; }

    /// <summary>
    /// 合同编码
    /// </summary>
    [ExcelHead("乙方单位", IsLocked = false, IsHiddenColumn = false, ColumnWidth = 8)]
    [Required(ErrorMessage = "合同名称必填")]
    [Length(100, ErrorMessage = "长度不能超过100")]
    public string YfProvider { get; set; }

    /// <summary>
    /// 合同编码
    /// </summary>
    [ExcelHead("合同金额", IsLocked = false, IsHiddenColumn = false, ColumnWidth = 8)]
    [Range(0, 999999999, ErrorMessage = "超出范围")]
    public decimal? Amount { get; set; }
    
    [ExcelHead("邮箱")]
    [Format(FormatEnum.Email,ErrorMessage ="格式错误")]
    public string Email { get; set; }
}

public class 标准导入导出
{
    public void Execute()
    {
        string excelPath = Directory.GetCurrentDirectory() + "\\..\\Template\\动态添加特性启用禁用.xlsx";

        //导入
        Import<Mysoft.Clgyl.Demo.DemoDTO.ContractImportDTO> import = new Import<Mysoft.Clgyl.Demo.DemoDTO.ContractImportDTO>(1);
        import.Execute(excelPath);

        Export<Mysoft.Clgyl.Demo.DemoDTO.ContractImportDTO> export = new Export<Mysoft.Clgyl.Demo.DemoDTO.ContractImportDTO>();
        export.ExportMemoryStream(import.ExcelGlobalDTO);
    }
}                                                
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!