SpreadJS V19.2 新特性揭秘:透视表的自定义分类汇总
先从一份别人的文件说起。一家公司财务发来的利润透视表,行字段"产品类别"下面并排挂着两行小计——一行求和,一行平均值。这张表在 Excel 里打开一切正常,可一旦被导入SpreadJS,再另存、再传回,那两行并排的小计不见了,字段下只剩一种"自动"的汇总。文件里明明写着的设置,转了一圈之后走样了。
这种"走样"的原因不难理解:数据透视表的行、列字段之下,除了默认的自动汇总,还可以由使用者显式指定多种汇总方式——这在 Excel 里称为字段的自定义分类汇总。而 SpreadJS 过去的透视表只认得"自动汇总"这一种形态,读入文件时遇到自定义配置,没有对应的语义去承载,便退而求其次地归并成了自动。数值没错,版式与语义却丢了。
V19.2 的数据透视表完整支持了这套语义。行字段、列字段之下的小计,从此可以由使用者逐个字段、按需指定:不想要就关掉,想自动就自动,想定制就定制。更重要的是,这份状态能够被原样保存下来——Excel 文件里带来的自定义分类汇总不再退化,经导入导出、存档读档的一路流转,仍保持当初的样子。
三种状态,一次说清
一个字段的分类汇总,在这套语义里只有三种状态。自动,即沿用默认的汇总逻辑,跟随值字段走;无,即该字段下不显示小计;自定义,即使用者显式勾选一种或多种汇总函数。三种状态彼此排他,选了这个就得放下另两个。
自定义不是单选项,而是一张可多选的清单:求和、计数、数值计数、平均值、最大值、最小值,以及乘积、标准差与方差的各种形态,共十一种,与 Excel 提供的选项一致。勾选两三种,字段下就并排出现对应的两三种小计;只勾一种,就只显示那一种。多选之下显示的顺序也固定,求和在前,随后是计数、平均值一路排下去,与 Excel 界面里列出的次序相同,且在不同版式、保存再打开之后依旧稳定。
并排的多重小计,还让一张透视表能同时照顾几类读者。一张门店销售透视表,行字段"大区"之下可以同时挂营收求和与门店计数两行小计——要总数的人看求和,要规模的人看计数,不必为了两种口径各做一张报表。

状态长在字段上
这套配置有一个值得留意的设计:分类汇总的状态是长在"字段"身上的,而不是临时依附在某个位置。字段放在行区或列区时配置生效;把它拖到筛选区,配置仍在,回到行列区后照常起作用;即便一时没有放入任何区域,配置也不丢失。字段在四大区域之间挪动,带走的始终是它完整的那套设定。配置的入口也顺理成章地长在字段身上——在字段设置里找到"分类汇总"区域,选定状态与函数,字段下的显示随之变化。把多选先清掉、回到自动或设为无,字段下的多余小计行即行收拢,整个过程所见即所得,不必离开字段对话框去别处找开关。
标题的写法也有规则。一般情形下,小计行的标题是"项的名称加上汇总方式的名称"。当行、列区里同时放着值字段时,规则要再进一步——小计标题会带上它所依据的值字段的名字,以便读者知道这行小计算的是哪个指标。几个值字段在列,就会有相应的几行小计,先后顺序随值字段的排列而变。

叶子节点的小计
透视表里还有一类此前没有小计的位置:层级末端的叶子字段。在"自动"模式下,如果一个字段下面没有更低一层的字段,它的下方原本不产生小计。开启自定义分类汇总后,这类叶子字段下方也会按设定生成汇总行,并且排在报表的总计之前,不占用总计的位置。展开时看到多行小计,折叠后字段只显示一行自动汇总——这一收一放之间,多行小计隐去,布局依然规整。
自定义汇总与总计的关系保持互不干扰:它不改变总计的计算结果,也不会把总计拆成多行。总计永远留在末尾,位置与样式都不因小计的增删而变动。
与各功能的相处
自定义分类汇总不是孤立的一层,它要和各种既有功能好好相处。字段内已有的排序、值筛选、按字段分组、值的显示方式等交互,仍然有效,彼此之间的语义也做了界定——比如,排序与筛选以"自动汇总"为依据,自定义的多种小计不参与排序的判定。分组产生的派生字段不继承原字段的分类汇总配置,原字段与分组字段各自保留各自的设定。这些细则保证新功能加入后,旧有操作不会出现二义性。
在文件层面,自定义配置以明确的标记写入文件,而不是靠猜。自动、无、自定义三种状态分别对应不同的落盘写法;回到 Excel 或再次打开,配置可以还原。这正是开头那个场景里丢失的东西,如今被稳稳接住了。反过来,不含这些标记的旧文件读进来,字段仍按默认的自动方式处理,行为与既往一致——新语义的加入,没有扰动既有的文件。
一处审慎的取舍
值得说明的是,产品在个别细节上做了审慎的取舍。Excel 对"自定义分类汇总单元格"的取数公式行为并不稳定——用取数公式去引用这类小计单元格,结果常是错值。SpreadJS 没有照搬这段不稳定行为,而是让这类单元格的回填走单元格引用的稳妥路径。取舍的方向很明确:把确定、可预期留给使用者,把 Excel 自己都还没理顺的语义挡在门外,待其稳定后再重新评估。这与其说是差异,不如说是产品在兼容与可靠之间主动画下的一条线。
一份来自 Excel 的透视表,能不能原样带回,再原样送出,是使用者对产品文件兼容最朴素的期待。自定义分类汇总这一步,让行、列字段之下的小计终于有了与 Excel 一致的面貌,也让这份期待在透视表这处细节上落了地。
葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。
更多推荐




所有评论(0)