1. 概述
本文主要介绍设置序号常用的函数seq() 和row() ,并汇总了对数据进行编号的不同方案。
2. seq()
1)概述
seq() 返回整个报表执行过程中该函数的执行次数。
2)示例
seq() 在第一次执行时,结果为 1,第二次执行时,结果为 2。如果一张模板中出现多个 seq(),则计算结果会累计。
如果 seq() 中带了非单元格参数,则表示不同的公式。例如,seq(1) 和 seq(2) 即表示不同的公式,在同一张模板中出现时,计算结果不会被累计。
3)其他说明
seq(cell)指在指定 cell 单元格组内的 seq 函数被执行的次数。
例如, seq(A2) 为计算在 A2 单元格组内,该函数被执行的次数。
注:seq() 计算行序号时有上限值,最大的序号值不得大于 2047。
4)应用场景
生成序号:常用于为报表数据生成连续的序号。
数据去重:计算指定对象出现的次数,例如seq($$$) == 1表示只出现 1 次的数据。
生成数据库主键:与 Oracle 数据库的序列号功能类似,可用于生成数据库主键,方便报表在不同数据库间移植。
分页控制:结合取余运算实现填报分页,例如seq() % 200 = 0表示每 200 行分一页。
3. row()
1)概述
row() 返回当前单元格的行号
2)示例
如果当前单元格为 A5,在 A5 中写入公式row()则返回 5。
如果当前单元格为 B8,在 B8 中写入公式row()则返回 8。
3)应用场景
隔行/列设置背景色:利用行号的奇偶性来设置不同的背景色,实现斑马线效果。
扩展后排序重新编号:在对报表进行扩展后排序时,直接使用seq()可能会导致序号乱序,此时可以使用row()-1来获取正确的序号。
分页控制:用于填报分页,例如(row() - 1) % 200 = 0表示每 200 行分一页。
注:此公式中的 -1 是因为有一行为表头标题,所以需要减去不参与计算,实际应用时请根据自己的报表表头的行数进行减行。

