文档首页 / 条件渲染

条件渲染

为单元格设置条件渲染规则:按数值改变颜色、隐藏行列、替换显示值、分页、缩进和加链接;条件的编写方式、规则执行顺序、预设规则和常见问题。

概述

条件渲染在报表计算完成后,逐个单元格判断条件,条件成立时改变该单元格(或所在行、列)的呈现方式:背景色、字体、边框、行高列宽、显示值、分页、缩进、链接等。它不改变数据集里的数据,只影响显示。

功能入口

  1. 在设计器里选中单元格。
  2. 打开右侧单元格设置面板的「渲染」标签页,找到「条件渲染」。
  3. 点「添加规则组」,从下拉菜单选一条预设,或新建空规则组;也可以点「粘贴」粘贴之前复制的规则组。
  4. 规则组打开「渲染条件」对话框:填写「条件标题」,配置分支与渲染内容。

一个单元格可以有多个规则组,规则组可以复制到其他单元格。

单元格属性「渲染」页签:格式化、渲染方式与条件渲染

规则组结构

一个规则组由若干分支组成:

分支 添加方式 说明
if 默认第一个分支 条件成立时应用它的渲染内容
else if 「+ 添加 ELSE IF 分支」 前面的分支都不成立时才判断
else 「+ 添加 ELSE 分支」 前面都不成立时应用,没有条件

每个分支包含两部分:「条件配置」和「渲染内容」。

条件配置

点「添加条件」增加一行条件,点「添加条件组」增加一组括号内的条件。条件之间用连接符 AND 或 OR 连接。每行条件选择类型:

普通条件:选择比较运算符,再填右值。

运算符 说明
等于、不等于
大于、大于等于、小于、小于等于
包含、不包含 文本包含
在集合中、不在集合中 值是否属于给定集合
以...开始、以...结束
不以...开始、不以...结束
为空、不为空 不需要右值

右值有多种类型:字符串、数值、日期、日期时间、布尔、公式、参数、单元格、数据列、集合。选「公式」时右值是一段表达式,选「参数」时右值是报表参数,选「单元格」时右值是另一个单元格的值。

公式条件:直接写一段表达式,例如 $$value > 10000。规则:

  • 表达式的结果必须是布尔 true(或文本 "true")才算成立。其他任何值,包括 1、非空文本、非空集合,都算不成立。这与 报表基本语法 中的真假判断不同。
  • $$value 表示当前单元格的值。数字文本会自动转成数值,以 0 开头的编码(如 001)保持文本。
  • 可以引用其他单元格、参数、函数,如 B2 > $threshold、row() % 2 == 1。

条件的判断顺序

  • 一个单元格上的多个规则组彼此独立,都会判断。
  • 一个规则组内,按 if、else if、else 的顺序判断,遇到第一个成立的分支就应用它,后面的分支不再判断。
  • 分支内的多行条件从上到下判断:遇到 AND 连接的条件不成立就整体不成立;遇到 OR 连接的条件成立就整体成立。第一行条件的连接符不起作用。
  • 分支没有渲染内容时被跳过。

需要「A 且 B,或 C」这样的组合时,用「添加条件组」表达括号,或直接写成一个公式条件。

作用范围

每项渲染内容都可以设置作用范围:

范围 含义
当前单元格 只改变本格
当前行 改变本格所在的整行(整行同格式,如隔行变色)
当前列 改变本格所在的整列

渲染内容类型

类型 作用 说明
背景色 单元格背景 选择颜色
字体颜色 文字颜色 选择颜色
字体样式 加粗、斜体、下划线、删除线
换行计算 文本自动换行
分页 在行前或行后插入分页符 选「行前分页」或「行后分页」
新值 替换显示的值 填公式,结果作为新的值
边框 单元格边框
行高 设置行高 填 0 隐藏整行
列宽 设置列宽 填 0 隐藏整列
缩进 文本缩进 填缩进的字符数
链接 附加超链接 见 单元格链接概述
内容渲染 改变内容的展示形式

新值

「新值」填写的是一段表达式,不是普通文本。想显示固定的文字,必须带引号:

写法 效果
"—" 显示横杠
"是" 显示「是」
— 无引号,不是有效表达式
$$value * 100 显示原值的 100 倍
$$value::string + '%' 原值后加百分号

设置新值后,单元格会按其原有的数据格式重新格式化。

操作示例

示例一:负数标红

  1. 选中金额单元格,进入「渲染」标签页,点「添加规则组」,选预设「负数标红」;也可以手动配置。
  2. 手动配置:if 分支,条件类型选「公式条件」,公式写 $$value < 0。
  3. 渲染内容选「字体颜色」,作用范围「当前单元格」,颜色选红色。
  4. 预览,金额为负数的单元格显示红色文字。

示例二:隔行变色

  1. 选中数据行任意一格。
  2. 添加规则组,选预设「隔行变色」,即公式条件 row() % 2 == 1,渲染内容为「背景色」,作用范围「当前行」。
  3. 预览时奇数行显示浅灰背景。

row() 是计算后的整张报表的行号,表头行也计入。要让第一条数据行不着色,把条件改成 row() % 2 == 0。

示例三:分级着色

一个规则组内使用 if、else if、else,为「达成率」三段着色:

分支 条件 渲染内容
if $$value < 0.3 字体颜色红
else if $$value < 0.7 字体颜色橙
else 无 字体颜色绿

这就是预设「百分比区间色」。

示例四:空值显示横杠

if 分支,公式条件 $$value == null || $$value == "",渲染内容选「新值」,填 "—"。

示例五:隐藏值为 0 的行

if 分支,公式条件 $$value == 0,渲染内容选「行高」,作用范围「当前行」,行高填 0。

示例六:与上一行相同则淡化

公式条件 $$value == cellOffset('B2', -1, 0),B2 换成本格自己的名称,渲染内容选「字体颜色」灰色。cellOffset 见 报表与数据集函数。

示例七:全表前三名高亮

公式条件 rank(G1[!0], G1) == 1,G1 换成本格自己的名称,渲染内容选「背景色」,作用范围「当前行」。用 else if 再加 == 2、== 3。排名规则见 聚合与集合函数:并列同名次,排名范围是整张报表,不分组。

示例八:手机号脱敏

if 分支,公式条件 $$value != null && length($$value::string) >= 7,渲染内容选「新值」:

left($$value::string, 3) + '****' + right($$value::string, 4)

$$value 会把数字文本转成数值,所以传给 left、right 前要 ::string 转回文本。

预设规则

「添加规则组」下拉菜单里的预设,按类别:

类别 预设 条件 效果
样式 隔行变色 row() % 2 == 1 当前行浅灰背景
样式 负数标红 $$value < 0 字体红
样式 阈值高亮 $$value > 10000,else 超过 10000 红底红字,否则绿底绿字
样式 正负值双色 > 0、< 0、else 正数绿、负数红、零灰
样式 合计行加粗 $$value == "合计" || $$value == "小计" 当前行加粗
样式 前N名高亮 rank(本格[!0], 本格) == n,n 取 1、2、3 前三名整行金、银、铜色
样式 过期标红 $$value != null && $$value < now() 早于当前时间的日期标红
样式 三级状态色 完成、进行中、else 绿、蓝、灰
样式 百分比区间色 < 0.3、< 0.7、else 红、黄、绿
布局 值为0隐藏行 $$value == 0 行高 0
布局 空值隐藏行 $$value == null || $$value == "" 行高 0
布局 分组后分页 true 行后分页
布局 行前分页 true 行前分页
布局 按层级缩进 true 缩进 2 个字符
值 空值显示横杠 $$value == null || $$value == "" 新值 "—"
值 布尔值转文本 $$value == true、else 新值 "是"、"否"
值 敏感数据脱敏 见下 见下

预设生成的只是初始配置,可以在对话框里继续修改。使用注意:

  • 「敏感数据脱敏」预设使用的 len、mid 不是内置函数,预设生成后运行会报错。请改用示例八的写法。
  • 「分组后分页」「行前分页」「按层级缩进」的条件是固定的 true,对每一行都成立;需要只对分组末尾分页时,自己改写条件。
  • 「前N名高亮」的名次范围是整张报表,不分组。

常见问题

现象 原因 处理
条件写了但一直不生效 公式的结果不是布尔 true,例如写成了 $$value、1 写成比较式:$$value > 0
公式写成 $$value = 0 = 是赋值,不是比较 用 ==
文本编码的比较不符预期 $$value 把数字文本转为数值,'001' 因前导 0 保持文本 比较前统一用 ::string,或用数值比较
新值显示报错 固定文字没有加引号 写成 "—"
行高设置 0 后整行消失 这是设计行为,用来隐藏行 不需要隐藏时不要设置为 0
row() 在「内容公式」里是 0 主内容计算阶段行还没有编号 只在条件渲染里用 row(),见 报表与数据集函数
多个规则组同时成立,效果叠加不符预期 规则组彼此独立,每个规则组都会判断 合并成一个规则组,用 else if 分支表达互斥
联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。