一、前言
之前我们聊到企业实现应用现代化是一项长期的任重道远的工作,通过Excel导入组件可以作为一个好的起点把企业的业务从线下迁移到线上,当把应用迁移之后,最终结果会有各种的报表展示,这时基于实际业务的需求,我们同样需要把这些数据通过Excel导出,比如存储归档,比如分享给别的部门的同事处理等等,那么Excel导出也是必不可少的功能。接下来让我们看看两种导出方式:通过导出到Excel按钮导出和通过Excel导出组件导出。
二、Excel导出按钮
使用 Excel 导出数据的最简单方法是使用数据网格中的“导出到 Excel”按钮。但是,这有几个限制
- 只能导出数据网格可访问的数据。
- 不能操纵要导出的数据。
- 如果数据网格具有 XPath 数据源,则只能使用“导出到 Excel”按钮。
数据网格上的“导出到 Excel”按钮
- 打开Product Overview页面并将数据网格数据源更改为XPath。
- 右键单击网格控制栏并添加导出到 Excel按钮。
- 运行应用程序,使用MxAdmin登录,打开“产品概览”页面并单击“导出到 Excel ”按钮。
- 将看到正在下载一个 excel 文件。打开文件,将看到您在数据网格中看到的所有数据。(提示:如果您想导出列而不向用户显示它们,您可以使用 CSS将列设置为Display: none 。)
三、Excel导出组件
1 简介
通过“导出到 Excel”按钮以 Excel 格式从Mendix应用程序中的数据网格导出项目是标准的Mendix功能。但是,在需要更多自定义 Excel 文档的情况下,应用程序可以利用Mendix Marketplace内容基于可配置模板创建自定义 Excel 文档。
2 下载所需的Marketplace模块
此过程所需的模块是Mx Model Reflection和Excel Exporter 。
Mx 模型反射模块使您的应用程序能够在运行时获取有关其域模型(实体和属性)和微流定义的信息。要下载模块,请执行以下步骤:
- 从Studio Pro中打开Mendix Marketplace。
- 搜索关键字reflection,选择Mx Model Reflection
- 单击下载以将该模块包含在应用程序中。它将被导入到App Explorer中的App> Marketplace模块中。
- 搜索关键字Excel,选择Excel exporter ,然后将该模块下载到您的应用程序中:
根据创建应用程序时选择的布局, Studio Pro中可能会因新模块的默认布局而出现错误。要更正此问题,请打开每个有错误的页面并将布局更新为应用程序中所需的布局。
3 添加导航项以允许用户配置设置
在本部分中将了解如何在应用程序的导航中添加配置 Mx 模型反射和将在应用程序中使用的 Excel 导出模板所需的页面。
- 在App Explorer中,转到Navigation。
- 向导航添加一个新项目以打开页面MxObjects_Overview:
- 将新项目添加到导航以打开页面Excel_Document_Overview:
- 打开App Security并将这两个模块分配给 Administrator 用户角色:
4 创建输入对象实体
创建一个用于导出 Excel 工作簿的实体。这将与用于填充 Excel 电子表格的数据的实体相关联。此操作指南将使用Policy实体来保存数据。
- 打开应用程序的域模型并添加一个实体作为“主要导出”实体,它是FileDocument的继承。
- 在新创建的实体与希望用作 Excel 导出基础的实体(或多个实体)之间创建关联。
5 配置Mx模型反射
要运行 MxModelReflection 同步,请执行以下步骤:
- 运行您的应用程序。
- 查看应用程序。
- 单击MxReflection导航项以打开 MxReflection 概览页面。
- 选择应用需要同步的各个模块,点击Click to refresh 。
- 在左侧Synchronize all entities and microflows of checked modules下,点击Click to refresh 。
6 创建 Excel 导出模板
Excel 导出器有许多选项,允许配置根据用户的需要简单或复杂。构建所需模板将根据要求而有所不同。模板的具体定义请参考Excel Exporter | Mendix Documentation
6.1 配置基本模板设置
要设置模板,请执行以下步骤:
- 运行应用程序。
- 查看应用程序。
- 单击Excel 导出器以打开导出器概览页面。
- 单击新建以创建新模板。
- 将文件名(不带扩展名)配置为使用模板时的默认文件名。这是可以识别模板的名称。当模板在微流中使用时,文件名总是可以改变的。
- 将输入对象配置为与要导出的实体关联的文件文档实体。
- 提供说明以识别和记录此模板的用途:
- 指定日期时间导出格式,该格式定义日期和时间在导出后应如何出现在 Excel 文件中。
6.2创建工作表布局
要创建工作表布局,请执行以下步骤:
- 在模板的工作表部分下,选择新建以创建新的工作表模板:
- 指定导出文件时将为工作表提供的名称。
如果使用上传的 Excel 文件作为模板,将使用您的 Excel 模板文件中定义的工作表名称,而不会使用您在此处输入的名称。有关详细信息,请参阅使用上传的 Excel 文件作为模板
- 配置要导出的行对象并设置对模板输入对象的引用(如果使用输入对象)。此实体类型的每个对象都将保存为工作表中的一行。
- 配置Start retrieved data at row以设置应导出数据的序号。
此设置可能会修剪正在导出的结果集,因为导出将从该值转到数据列表的末尾
- 选择导出是否应仅导出不同的数据或允许重复数据
- 指定列默认宽度和行默认高度(或将它们保留为默认值)。
- 指定提取是否将使用静态数据:
如果使用静态数据,将在下面进行配置。
- 指定是否将表示要应用于导出数据的预定义样式的默认文本样式。
- 指定默认标题文本样式是否将表示要应用于标题数据的预定义样式:
指定样式将在下面的部分中讨论。
6.4 配置动态列数据
要配置动态列数据,请执行以下步骤:
- 在“列数据”选项卡上,选择“新建”以创建新的导出列:
- 列号将自动设置,但可以覆盖为所需的序号。
- 为列定义名称。这将是导出时的列标题。
- 指定检索类型以确定此列是属性还是引用。
- 指定Select 属性以标识将存储在此列中的行对象的属性。
- 指定列是否应生成聚合。请注意,只能聚合十进制、整数和长整数类型。
6.5 配置Sheet中的静态数据
要配置工作表中的静态数据,请执行以下步骤:
- 打开静态数据选项卡并选择新建以创建新的导出列。
- 指定应放置静态值的行和列。
- 在名称字段中输入单元格的名称。
- 通过选择单元格是静态文本、对象数据还是聚合函数来指定类型。此示例使用静态文本(在选择时将名称字段更改为Excel 文本)。
- 指定应用于单元格的样式。
6.6 配置自定义单元格格式和样式
要为单元格配置自定义格式和样式,请执行以下步骤:
- 返回新模板的主页,单击样式部分中的新建以创建可应用于 Excel 导出中的任何数据的新样式:
- 指定将应用于单元格的样式的属性。
如果您使用上传的 Excel 文件作为模板,您在此处选择的背景颜色(如果该值不是none )将覆盖模板中的背景颜色。
- 单击Save以使样式可用于动态列、静态列和标题。
7 通过微流调用 Excel 导出模块
在应用程序中调用新创建的 Excel 导出模板。要检索模板并生成文档,请执行以下步骤:
- 创建一个微流,它采用需要导出的对象的入站参数,或者将该对象检索到微流中。
- 在微流中,检索一个对象,它是之前设置的用于导出的模板。
- 在微流中,调用GenerateExcelDocJava 操作(可从模块的JavaActions文件夹中获得)以将所需的对象传递给模块。
- 在微流中,下载生成的 FileDocument 对象。微流应与此类似:
8 运行微流
目前该应用程序现在缺少两件事:没有数据可以下载和没有办法运行微流
请参阅以下部分以添加这些缺失的内容。
8.1 创建数据
为了允许输入一些数据,需要生成一些页面,然后按照以下步骤在其中输入一些数据:
- 右键单击域模型中的Policy实体并选择Generate overview pages… 。
- 选择Policy并单击确定。
- 通过主页或应用导航将生成的概览页面链接到应用。
- 运行应用程序并输入一些数据以创建策略对象。
8.2 运行微流
要运行在上面创建的微流,需要创建另一个添加到导航中的微流。这个微流应该创建一个PolicyDoc对象并使用循环将其与现有的Policy对象相关联,确保所有关联在循环之后提交,并将这个 PolicyDoc 作为参数传递给微流。这将导出与PolicyDoc关联的所有 Policy 对象。
新微流应类似于以下内容:
四、应用展示
创建实体如下
创建模板
创建微流生成和下载Excel
下载的文档如下
五、参考资料
- Excel导出组件 Marketplace介绍https://marketplace.mendix.com/link/component/726
- MX Model Reflection组件MarketPlace介绍https://marketplace.mendix.com/link/component/69
- Excel导出具体文档参考Excel Exporter | Mendix Documentation和Export to Excel | Mendix Documentation
关于Mendix公司
Mendix公司,a Siemens business,正在迅速成为企业数字化转型的推动者。其业内领先的低代码平台和全方位的生态系统整合最先进的技术,帮助企业创造出提高互动性、简化操作和克服IT瓶颈的解决方案。Mendix公司是权威行业分析师眼中的领导者和远见者,也是一个云原生、开放、可扩展、敏捷和饱经考验的平台。从人工智能和增强现实,到智能自动化和原生移动,Mendix公司已成为数字化先行企业的骨干。Mendix公司企业低代码平台已被全球4000多家领先的公司采用。