一、概述
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);
}
}
来源:CSDN
作者:wufenglu2009
链接:https://blog.csdn.net/wufenglu2009/article/details/103933779