XAF Excel Importer

这篇具有很好参考价值的文章主要介绍了XAF Excel Importer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开源项目地址:https://gitee.com/easyxaf/excel-importer

前言

在XAF中有Excel导出,但没有Excel导入,一开始不理解,难道Excel导入很难实现吗,当我自己去实现Excel导入功能时,才发现难的不是技术,而是要有足够的灵活性,在不同的项目中或不同的业务场景中,都会有不同的需求,可能需要很多客制化,那能不能实现通用的Excel导入功能呢,我感觉满足所有需求是不可能的,但满足大多数需求还是有可能的。

思路

Excel导入本质是数据的映射,就是将Excel的行映射到XAF的BO对象中,这中间要涉及到数据类型的转换,如数值、日期、布尔、枚举、引用等类型,同时还要有数据的校验,由于Excel输入的灵活性及随意性,可以提高输入的方便性,但输入的准确性会大打折扣,所以数据的校验很重要。
结合XAF的特点,再加上Excel的灵活性,本Excel导入模块,优先考虑了采用XAF的Model进行Excel导入模板的创建,由于Model可以在设计时及运行时创建,这样可以解决Excel导入模板的灵活性,再通过XAF的条件表达式(Criteria)来实现数据的验证及数据的转换,基本可以解决大部分Excel导入的需求。

使用

首先看一下项目结构:

XAF Excel Importer

项目中带有Sample的是示例项目,主要项目为三个,EasyXaf.ExcelImporters为主项目,EasyXaf.Blazor.ExcelImporters为Blazor适配项目,EasyXaf.Win.ExcelImporters为WinForm适配项目,根据项目类型选择不同的项目。

本模块支持XPO及EFCore,由于Blazor项目需要一个存储临时文件的实体,而XPO与EFCore的实体类是不一样的,模块中并没包含这个实体(ExcelImporterTempFile),而是将其放到了示例模块项目中,如下图

XAF Excel Importer

在项目引用模块时,需要将文件ExcelImporterTempFile.cs拷贝到自己的项目中,对于EFCore项目,还要将ExcelImporterTempFile类,添加到DbContext中,如下图

XAF Excel Importer

完成以上操作后,就可以正常使用了。

示例

下面通过一个简单的示例来讲解Excel导入模块的功能

简易Excel模板制作

XAF Excel Importer

导出的Excel模板

XAF Excel Importer

编辑后的Excel模板

XAF Excel Importer

导入Excel数据

XAF Excel Importer

上面是简单的演示,Excel导入的过程需要4个步骤

  • 模板制作
  • 导出模板
  • 编辑数据
  • 导入Excel

模板的有效性验证

模板的制作是整个Excel导入模块的核心功能,为了提高用户在Excel输入的体验,同时为了避免输入错误数据,在模板中加入了有效性验证,如必填验证,数值及日期的范围验证,布尔值及枚举的下拉选择,同时还支持引用类型的下拉选择等

XAF Excel Importer

Excel录入数据

XAF Excel Importer

设置

了解上面的简单介绍后,下面讲解一些具体的设置

Excel模板中的下拉选择

在User中有一个IsActive属性,它的类型为布尔型,在本模块中布尔型默认会使用下拉选择,如果IsActive属性定义了CaptionForFalse及CaptionForTrue,则采用定义的文本,否则会采用'否'与'是',但同时我们也可以设置PredefinedValues属性,如非活动与活动

PredefinedValues不仅可以用在布尔型中,也可以用在其它所有类型中(在数值及日期中也可以使用),同时它的优先级最高,定义了PredefinedValues后,则会忽略其自身的下拉选择,如果用在枚举中,要保证与枚举顺序保持一致

XAF Excel Importer

Excel模板中的效果

XAF Excel Importer

Excel模板的标头格式

默认情况下,在Excel模板中必填列的标头文本会加粗,如感觉不明显或想着重强调,可以修改相应的样式,NumberFormat对应着单元格的数值格式,可以通过它设置格式中数值或日期的显示格式。

XAF Excel Importer

Excel模板中的效果

XAF Excel Importer

Excel模板的标头文本

如果我们没有设置列的Caption属性,它将采用BO中定义的Caption,如果BO的Caption也为空,则采用BO类型的Name属性。同时可以用它来适配外来的Excel工作表,这样就可以不用修改Excel工作表原有标头文本,通过与其它参数配合,可以实现外来Excel工作表直接导入。

XAF Excel Importer

Excel模板中的效果

XAF Excel Importer

Excel模板中的列隐藏

在Excel模板中我们一般不需要对列进行隐藏,但有时我们需要通过导入来更新时,有时需要Oid等字段,如果我们不想显示出来,可以对其进行隐藏,只是进行了隐藏,用户可以轻松的显示出来,无法通过它隐藏数据

XAF Excel Importer

Excel模板中的效果

XAF Excel Importer

Excel模板中引用类型的下拉选择

本模块中引用类型默认不下拉选择,这主要基于安全考虑,由于引用类型下拉选择数据源中的数据并不是面向所有用户的,所以不能把不相关的都显示出来,这里需要单独的定义,可以通过PredefinedValues或DataSoruceCriteria,而DataSoruceCriteria可以通过表达式来限制数据源的显示。

XAF Excel Importer

Excel模板中的效果

XAF Excel Importer

忽略验证错误

一般验证错误是不需要忽略的,但有时我们提供了下拉选择,也允许用户输入下拉列表之外的内容时,就需要忽略验证错误,这样Excel不会阻止用户的输入

XAF Excel Importer

必须包含的Excel工作表列

有时我们要保证数据的完整性,要求用户输入比较完整的信息,在Model中定义的列,如果是必填的,那么在导入时首先会检查Excel工作表对应的列是否存在,如果不存在则无法导入,而对于不是必填的列,由于Excel的灵活性,用户可以很轻松的删除,我们可以将MustIncludeColumn设为True,这样缺少当前列时将无法成功导入。

XAF Excel Importer

导入时的默认值表达式

默认值一般用在当用户没有输入值时采用的值,格式为Criteria表达式。同时默认值还有一种使用场景,与VisibleInTemplate结合使用,当VisibleInTemplate为False,当前列不会显示在Excel模板中,可以通过设置默认值,用于它的初始值,例如:当我们希望用户导入的数据只在他自己所在的部门,但我们又不想用户自己选择部门,就可以通过这种方式。

XAF Excel Importer

列不显示在模板中

这里的不显示就是不在Excel模板中创建列,Excel模板不会包含它,与ColumnVisible是不一样的,ColumnVisible会将列包含在Excel模板中,而VisibleInTemplate一般主要用于不想要用户自己输入,可以结合DefaultValue一起使用

XAF Excel Importer

不更新模板中的列

模板中的列默认都是更新的,但有时我们是不需要更新的,比如在盘点时,我们只更新数量,但其它的列则是展示列没有必要更新,再比如,当用户表中部分用户手机号错误或不全时,需要比对确认,那么在导入时,我们希望只更新手机号

XAF Excel Importer

列的值表达式

一般主要用在引用类型的查找,通过设置Criteria来查找引用类型,同时也可以通过它来实现数据的转换,如下面在导入时在用户名的前面加上USER。ValueCriteria扩展性很强,可以使用XAF中的表达式函数,也可以使用自定义表达式函数

XAF Excel Importer

Excel模板中的效果

XAF Excel Importer

导入后的效果

XAF Excel Importer

导出视图数据

导出Excel模板时包含视图数据,这里的视图数据是视图查询出来的可显现数据,主要用在数据更新,可以对导出的数据进行修改,然后再次导入

XAF Excel Importer

主键的导入

主键主要用于更新,主键不一定是BO的真实主键,也可以是其它的唯一字段,如果不是BO的主键,需要设置KeyCriteria

XAF Excel Importer

导入数据方式

导入数据方式是导入数据时创建BO对象的方式,有4种导入方式

  • 同步(Synchronize),它不仅创建不存在的数据,同时还会更新已存在的数据(默认行为)
  • 仅创建(OnlyCreation),它只创建不存在的数据,已存在的数据不会更新
  • 仅更新(OnlyUpdate),不存在的数据不会创建,更新已存在的数据
  • 全创建(AllCreation),不管是否存在都会创建

XAF Excel Importer

验证失败展示

由于Excel的灵活性,无法避免错误的产生,如果导入时对数据验证不通过时,则将其显示在相应的单元格中,如果验证错误没有对应的单元格,则将其错误信息放在对应行的第一个单元格中。错误单元的背景可以通过ErrorBackgroundColor来设置,为空时将采用默认背景颜色。

XAF Excel Importer

自定义数据验证

数据验证是导入数据的保障,本模块中会依次采用下面的方式进行数据验证

  • 数据类型的验证
  • 模板中定义的最大值,最小值
  • BO中定义的规则
  • 模板中自定义的规则

XAF Excel Importer

最后

Excel导入模块现已实现了基础功能,今后还会根据业务的需求扩充新功能

https://www.cnblogs.com/haoxj/p/17419045.html文章来源地址https://www.toymoban.com/news/detail-453611.html

到了这里,关于XAF Excel Importer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GPT-4开源平替miniGPT-4来了,仅需23G显存单机可run,附论文、项目代码地址

    来源 | 新智元  微信号:AI-era 先是ChatGPT的发布给世界带来了一点小小的NLP震撼,随后发布的GPT-4更是破圈计算机视觉,展现了非凡的多模态能力。 不光能读懂人类的梗,给个手绘草图甚至可以直接写出网站的代码,彻底颠覆了对语言模型、视觉模型能力边界的认知。 GPT-

    2024年02月01日
    浏览(31)
  • 谷歌浏览器插件篇之console Importer

    前言 作为一名前端开发者,相信在开发实践中,使用过诸多第三方库。譬如:lodash、moment、dayjs、antd等数不胜数。 然每每使用,经起繁琐,便令人有反抗之意。其步骤如下:首先要在搭建好的项目里,安装、引入、使用。 这里有个问题,如果我只是想调研一下,同等功能包

    2024年02月12日
    浏览(31)
  • IP地址怎么实现HTTPS访问?

    为IP地址申请HTTPS证书跟为域名申请证书的步骤大同小异。需要注意的是,IP地址证书申请安装后, 用户只有通过IP地址访问才会显示访问安全 ,如果通过该IP地址所绑定的域名访问的话是没办法显示安全绿锁的。因为之前有用户问过小编——-我的ip地址绑定多个域名,我直接

    2024年01月17日
    浏览(44)
  • 前端问题:如何使网页中的http地址自动升级为https地址

    我一个搞后端开发的天天捣鼓前端的事,会不会被各位同僚念叨,哈哈。项目上的需求,需要把现在的https地址转换成http的地址,然而修改了nginx配置,摘除了证书,访问的所有静态文件依然是https,捣鼓了好半天,终于搞明白了原理,反其道而行,就有了这篇文章。 当我们

    2024年02月14日
    浏览(31)
  • notepad++官网地址 https://notepad-plus-plus.org/;notepad++ 官网地址 https://notepad-plus-plus.org/

    notepad++ 官网地址 https://notepad-plus-plus.org/ 今天想进官网下载notepad++ ,却发现百度搜索官网都是出来很多乱七八糟的,就自己记录一下 notepad++官网:https://notepad-plus-plus.org/ notepad++项目主页:https://github.com/notepad-plus-plus/notepad-plus-plus/

    2024年02月11日
    浏览(31)
  • 如何用JS校验HTTP和HTTPS地址

    当我们需要验证用户输入的网址时,经常需要校验是否为合法的HTTP或HTTPS地址。下面是一些JS代码,可以用来验证HTTP和HTTPS地址。 使用该函数来检查HTTP地址是否有效: 使用该函数来检查HTTPS地址是否有效: 以上JS代码可以很方便地验证HTTP和HTTPS地址的有效性。希望对你有所帮

    2024年02月07日
    浏览(34)
  • XAF中XPO与EFCore的探讨

    首先抛出一个问题,在XAF项目中,我们现在可不可以选择EFCore?每个人可能都有自己的答案,这也没有什么标准答案。下面是我的个人看法,在刚接触XAF时,如何选择ORM,我也是犹豫了许久,最终选择了XPO,主要基于以下几点考虑 1.XPO是DEV的产品,支持力度及倾向性要比EFC

    2024年02月05日
    浏览(21)
  • 简单区分网页地址中http://和https://的区别

    HTTP(HyperText Transfer Protocol)HTTPS(HyperText Transfer Protocol Secure)是两种用于传输数据的协议,它们有以下主要区别: 首先从大的方面来讲: http:超文本传输协议,是一种不安全的协议,对数据不提供任何形式的加密。数据在传输过程中以明文形式发送,容易被中间人窃听和篡

    2024年02月11日
    浏览(29)
  • 请求第三方Https地址忽略SSL证书校验

    说明:个人使用记录 需要在请求之前忽略ssl协议,这里是直接使用静态方法初始化时就执行了 也需要在请求接口之前忽略SSL

    2024年04月10日
    浏览(36)
  • 网页地址中http和https的区别全解析

    httsp是什么意思?yii666在前面用了一篇文章有介绍过,用户可以去看看这篇文章,因为今天yii666所要讲解是http和https有哪些区别?如果你对http和https两个词的定义很模糊的话,那么就比较难理解它们之间的区别。下面我们就进入正题 http和https的区别全解析 ?具体内容如下:

    2024年02月05日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包