Excel 导出
Excel 导出组件提供标准导出和模板导出两种方式
- 标准导出:支持动态设置导出列,可导出 Excel、PDF 文件
- 模板导出:模板支持 Excel 文件和 Word 文件,支持动态模板、导出主从数据、批量导出。使用 Excel 模板导出 Excel、PDF 文件;使用 Word 模板导出 Word、PDF 文件
Excel 导出组件提供的属性如下
- “导出数据”属性:选择一个数据集作为导出的数据源
- “导出文件名”属性:默认是数据集的中文名,输入文件名即可,不需要带后缀
- “数据来源”属性:选择数据源,分为前端数据、后端数据和全部数据
- 查询结果数据:查询到当前页面满足条件的数据,导出包括前端计算列。例如,根据设置的过滤条件,满足条件的数据查询出的有36条,数据集分页大小默认为20条/页显示时,此时数据只导出20条数据
- 数据服务: 从后端导出满足条件的所有数据,导出不包括前端计算列。例如:根据过滤条件满足条件的数据查询出的有36条,此时选择此选项,则会将满足条件的所有数据进行导出,即导出36条数据
- 全部数据: 导出数据库里的所有数据,不带条件,即使导出的数据集加了条件也不会执行,此选项是导出全部数据,(注:导出的数据集如果带图片,超过200条数据的则会以 zip 格式导出,每200行数据生成一个 Excel 文件)
- “导出设置”:设置标准导出、模板导出
- “模板源设置”:使用模板导出时,设置模板来源
- “绑定数据列”:使用数据组件中附件列中的文件,作为模板
- “网络地址”:使用一个 URL 作为模板,通常在动态切换模板中使用
Excel 导出组件提供导出操作、导出方法、导出前、导出成功、导出失败等事件。
标准导出
标准导出提供基础设置、列设置和行样式设置
基础设置
设置项 | 值 | 说明 |
---|---|---|
文件类型 | 03版excel、07版excel | 03版excel,导出 xls 文件;07版excel,导出 xlsx 文件 |
是否输出PDF | 是、否 | 是,导出为 PDF 文件,否,导出为 Excel 文件 |
标题名称 | 字符串 | 设置后,第一行显示标题 |
列设置
对导出列逐一进行设置,支持调整导出列顺序
设置项 | 值 | 说明 |
---|---|---|
选中 | 是、否 | 标记是否导出,仅导出选中的列 |
标识 | 字符串 | 数据集的列名 |
名称 | 字符串 | 重定义列名,导出时使用此名 |
导出类型 | 文本、数字、图片、日期 | 默认无需设置,系统已根据数据列的类型自动识别 |
列宽 | 数值 | 导出的列宽 |
行高 | 数值 | 导出的行高 |
分组名 | 字符串 | 导出双层列头时,定义分组名 |
单元格纵向合并 | 是、否 | 相邻的相同值会合并单元格 |
后缀 | 字符串 | 导出的内容后面加上这个后缀,设置后导出的内容为文本,不能参与统计 |
是否统计该列 | 是、否 | 是,会在最下面显示出合计值。与“后缀”和“数字格式化”互斥,由于设置“后缀”或“数字格式化”后,数值变成文本,从而不能正确统计 |
数字格式化 | DecimalFormat 类的 Pattern | DecimalFormat 类用于格式化十进制数字,例如 ,### 表示显示千分位。设置后导出的内容为文本,不能参与统计 |
导出时间格式 | 时间格式 | yyyy表示年、M表示月、d表示日、h表示小时、m表示分钟、s表示秒,写两个字母表示补零 |
数据库格式 | 时间格式 | 同上 |
脱敏规则 | 规则1:n_n,规则2:n,n,规则3:n~@ | Excel 导出使用 EasyPoi,参考 EasyPoi 导出数据脱敏,见下面的说明 |
规则1:采用保留头和尾的方式,中间数据加星号
例如:身份证 6_4 则保留 370101*********1234
手机号 3_4 则保留 131****1234
规则2:优先保留头,保留规则以对称为主
例如:姓名 1,3 表示最多隐藏3位,最少隐藏一位
李云 --> 李*
张云天 --> 张*天
规则3:特殊符号后保留
例如:邮箱 1~@ 表示只保留第一位和@之后的字段
afterturn@wupaas.com --> a********@wupaas.com
行样式设置
给行设置样式
- 行类型包括:第一行、最后一行、奇数行、偶数行、所有行
- 样式类型包括:字体加粗、字体下划线、字体中划线、斜体字体、字体颜色、背景颜色
- 字体加粗、字体下划线、字体中划线、斜体字体输入 true 和 false
- 字体颜色、背景颜色输入具体颜色值,例如:#eeeeee
使用案例
导出多列头
在列设置中设置分组名,实现多列头,设计界面如下图所示
导出文件如下图所示
显示合计值
在列设置中选中是否统计该列,显示该列的合计值,注意不能设置后缀和数字格式化,设计界面如下图所示
导出文件如下图所示
设置时间格式
在列设置中设置导出时间格式和数据库格式,实现自定义时间格式,设计界面如下图所示
导出文件如下图所示
导出数据脱敏
在列设置中设置脱敏规则,实现数据脱敏,设计界面如下图所示
导出文件如下图所示
奇偶行不同颜色
在行样式设置中设置偶数行或奇数行颜色,实现奇偶行不同颜色,设计界面如下图所示
导出文件如下图所示
动态导出列
Excel 导出组件提供导出方法 exportExcel 导出 Excel,方法中的 columns 参数包含导出列信息。
- columns 参数为空时,使用组件中定义的导出列
- 使用 columns 参数自定义导出列,支持多列头模式
- columns 参数支持数组,也支持逗号分隔的字符串
- columns 参数中的列名是数据集的列名,显示在列设置的“标识”列中,如下图所示
列设置中的“标识”,如下图所示
动态导出列 JS 代码如下
react 代码
onExportColBtnClick = (event) => {
let columns = this.comp("pageData").getValue("showPrice") == 1 ? "name,unit,price,images" : "name,unit,images";
this.comp("exportExcel5").exportExcel({ columns });
}
vue 代码
let $page = usePage();
let pageData = useData("pageData");
let onExportColBtnClick = (event) => {
let columns = pageData.getValue("showPrice") == 1 ? "name,unit,price,images" : "name,unit,images";
$page.comp("exportExcel5").exportExcel({ columns });
}
模板导出
模板导出的数据来源必须选择“数据服务”,提供模板设置和行样式设置
模板设置
设置项 | 值 | 说明 |
---|---|---|
文件类型 | 03版excel、07版excel、07版word | 模板文件类型,也是导出的文件类型。03版excel拥有完整能力,07版excel不支持导出动态图片、不支持导出为PDF |
是否输出 PDF | 是、否 | 是,导出为 PDF 文件,否,导出和模板一样的文件 |
每行一个文件 | 是、否 | 导出主从数据时,每一条主数据和它的从数据导出为一个文件。如果一次导出多条主数据,会产生多个文件,这些文件压缩后,导出一个 zip 文件 |
每行一页 | 是、否(文件类型为 Word 时生效) | 导出主从数据时,每一条主数据和它的从数据导出为一页。如果一次导出多条主数据,一个文档中会产生多页 |
输入全部的工作表 | 是、否(文件类型为 Excel 时生效) | 是,模板文件中有几个 Sheet 导出几个 Sheet;否,只导出第一个 Sheet |
工作表名称 | 字符串,多值时用逗号分开 | 定义导出的 Sheet 的名称 |
工作表位置 | 数字,多值时用逗号分开 | 和工作表名称同时使用,定义 Sheet 名称的索引 |
子表展现为表格 | 是、否 | 是否指定表格的渲染方式,默认采用 MultipleRowTableRenderPolicy 方式 |
渲染方式 | 多行渲染 MultipleRowTableRenderPolicy 循环渲染 LoopRowTableRenderPolicy | 表格的两种渲染方式,显示效果一样,模板语法不同:多行渲染以{{?orderd}}开头,以{{/orderd}}结尾,使用{{productId}}渲染内容;循环渲染在表格开头使用{{orderd}}表示循环,使用[productId]渲染内容 |
行样式设置
行样式设置参考“标准导出”的行样式设置
使用案例
下面列举的都是导出主从数据,除了可以导出主从数据,还可以只导出主数据
准备主从数据
- 准备主表数据集和从表数据集
- 在主表数据集上添加输出数据集,查询主表数据时,可以同时获得从表数据
选择从表数据集,设置从表外键字段和主表主键字段的映射关系,这里定义的“名称”在模板中使用
- 在主表数据组件上,选中全部数据列,包括主表的数据列和从表的数据列,使得查询主表数据时,同时查询从表数据
准备主从模板
主从模板分为两类:主从详情和主从列表
- 主从详情:模板设计为显示一条主数据及它的从数据列表
- 主从列表:模板设计为显示主数据列表和它的从数据列表
Excel 模板-主从详情
主表数据:使用”双大括号加列名“表示显示列,例如:订单编号{{orderNo}}
从表数据:使用{{$fe:maplist 开始循环,使用”t.从表 id.列名“表示显示列,使用}}结束循环
Excel 模板-主从列表
使用{{$fe:maplist开始循环,使用}}结束循环
主表数据:使用”t.列名“表示显示列,例如:订单编号 t.orderNo
从表数据:使用”t.从表 id.列名“表示显示列,例如:产品 t.orderd.productName
Word 模板-主从详情
支持两种渲染方式
- 多行渲染 MultipleRowTableRenderPolicy
主表数据:使用”双大括号加列名“表示显示列,例如:订单编号{{orderNo}}
从表数据:使用{{?从表id}}开始循环,使用{{/从表 id}}结束循环,使用{{列名}}表示显示列,例如:产品{{productName}}
图片列:需要加 @ 前缀,例如:{{@image}}
- 循环渲染 LoopRowTableRenderPolicy
主表数据:使用”双大括号加列名“表示显示列,例如:订单编号{{orderNo}}
从表数据:在表格开头使用{{从表id}}表示循环从表,使用[列名]表示显示列,例如:产品[productName]
图片列:需要加 @ 前缀,例如:{{@image}}
Word 模板-主从列表
使用{{?maplist}}开始循环,使用{{/maplist}}结束循环
主表数据:使用{{列名}}表示显示列,例如:订单编号{{orderNo}}
从表数据:使用{{?从表 id}}开始循环,使用{{/从表 id}}结束循环,使用{{列名}}表示显示列,例如:产品{{productName}}
图片列:需要加 @ 前缀,例如:{{@image}}
导出主从数据
将上一步中准备好的模板,上传到数据集中。在页面上添加模板数据组件,查询出要使用的模板
Excel 导出组件的“模板源设置-绑定数据列”属性绑定到模板数据组件。在导出设置中,导出模式选择“模板导出”,选择模板的文件类型,是否导出 PDF
特别说明:主从详情模板需要设置:每行一个文件或每行一页
- 每行一个文件:一条主数据生成一个 Excel 或 Word 文件,一次导出多条主数据时,会导出一个 zip 文件,里面包括多个 Excel 或 Word 文件
- 每行一页:只对 Word 模板起作用。一条主数据生成一页,一次导出多条主数据时,会导出一个 Word 文件,里面包括多页
导出选中数据
在表格组件上设置选中数据集
在页面上添加一个主数据的数据组件,清空自动模式,使用选中数据集的 ID 列表过滤主数据,如下图所示。
Excel 导出组件使用上一步添加的数据组件,这个数据组件不需要加载数据,Excel 导出组件获取这个数据组件上的过滤条件,在后端查询数据时使用,因此无需在前端加载数据
根据数据动态切换模板
根据数据来决定使用哪个模板,用模板数据集中的一列和业务数据集中的一列的值相等,作为使用模板的依据,使用 Excel 导出组件的“模板源设置-网络地址”属性实现,网络地址一般写为
/main/dbrest/模板数据集?$get=模板列.stream(0)&模板类型列=eq.${业务数据中的模板类型列}
本例中主数据集的 templateType 列作为模板类型,在 Excel 导出组件的模板源设置中,设置网络地址如下
/main/dbrest/exportTemplate?$get=template.stream(0)&kind=eq.${templateType}
其中
- exportTemplate 是模板数据集的标识
- template 是模板数据集中的模板列名
- kind 是模板数据集中的模板类型列名
- templateType 是业务数据集中的存有模板类型的列名
模板数据集定义,如下图所示
案例位置
桌面-页面-文件处理组件-导出组件.w