如何在 CSV 中定义流程图的连线

如何写 CSV 里的连线到和连线文字两列:填行的位置而不是步骤名称、按位置配对的分支标签、会把一个标签劈成两个的逗号,以及插入一行会带来什么后果。

在 CSV 里,一条连线就是连线到这一列里的一个行位置,它的标签是连线文字里位置相同的那一项——两列纯文本按位置配对,没有标识符,也没有引号能保护它们。

简而言之

  • 连线到填的是从 1 开始的行位置,用逗号分隔:“7,6,21”。
  • 连线文字按同样的顺序填分支标签,两者按位置配对。
  • 分支标签里出现半角逗号会被读成第二条分支,而且加引号也救不回来。
  • 插入或删除一行,会让它下面每一个位置重新编号。
  • 一个比当前行更小的数字是一条合法的回溯连线,而不是错误。

两列承载了文件里的每一支箭头

CSV 没有任何办法表达一条链接。它是一份扁平的记录清单,字段之间有一个分隔符,而这个格式里没有任何东西能让一条记录引用另一条。所以一张写成 CSV 的流程图,只能自己发明这套引用,而 QueryChart 的约定是其中最简单的一种:连线到这一列填的是你所指向的那一行从 1 开始的位置,一个步骤通向多处时用逗号分隔;连线文字这一列按同样的顺序填这些箭头的标签。

整套机制就这些。连线到里的“5,4”画出两支箭头,指向文件里的第 5 条和第 4 条数据行;连线文字里的“是,否”把“是”放在第一支上、“否”放在第二支上。配对是按位置而不是按名称的,这意味着两个单元格得靠人手保持同步,谁也验证不了谁。把顺序弄反,文件照样导入,图照样画出来,而它说的是与你本意相反的话。

位置也正是 CSV 的连接比带公式的 Excel 表格更脆弱的原因。这里没有锚定,没有相对引用,也没有一列 ID 在替你干活。在导出文件中间插入一行,它下面每一行的位置都会挪一位,而它上面每一个连线到单元格仍然指着原来的数字。如果你的行来自一个会重新排序的系统,请在写下第一个连线到值之前先读 /zh/guides/流程图csv文件结构,因为行的顺序就是这里的模式定义。

下面这个示例是一棵退款资格决策树——25 行,其中有四个分成三支的判断,还有一支指向后方。这是一份真实的裁定政策被写成文件而不是被画出来时的样子。请打开画布下方的表格面板,对着箭头读连线到这一列,或者打开 /zh/templates/csv决策树 直接改那些单元格。

一棵 25 行决策树上的连线到与连线文字

退款资格树的四个阶段。打开表格面板,对着它们画出的箭头读这两个连接列。

  1. 只有行和形状,还没有箭头

    前七行只有方框文字和形状,别的什么都没有:一个开始、一个记录订单号的输入行,以及五个菱形,止于“商品是实物还是数字商品?”。画布上是七个散落的方框。政策里的每一个提问都写下来了,却没有一个有答案的去路,因为连线到还是空的。

  2. 连线到指向行的位置

    现在位置填上了。“系统中能否查到该订单?”的连线到写着 5,4,分成两支;“商品是实物还是数字商品?”写着 8,11,把这棵树劈成实物分支和数字商品分支。请注意 5,4 并没有排序——单元格里的顺序是作者定的顺序,而连线文字要配的正是这个顺序。

  3. 连线文字给出口贴标签

    “订单距今多久?”把 7,6,21 与“30天以内,31至90天,超过90天”配成一对——三个位置,三个标签,从左到右一一对应。这些标签里没有一个含半角逗号,这是刻意的,不是运气。第 14 行“换货还是退款?”指向 19,12,而 12 在它上面:一支回到“计算全额退款金额”的箭头,看着像错,其实完全正确。

  4. 终止框与泳道

    最后几行是这棵树能有的五种结束方式:一个拒绝行、作为结束的“客户无回复即关闭申请”,以及退款、账户储值和换货三个成功行。它们的连线到单元格是空的——在 CSV 里,一个终止步骤就是这样声明的:靠一个缺席的值,而不是靠一个关键词。随后两个泳道列把全部 25 行铺进从申请到结付、从客户到财务的网格里,一条连接都不必碰。

运作方式

  1. 写任何位置之前,先把行的顺序定死

    连线到引用的是文件里的位置,所以文件的顺序是受力构件。把导出文件按你想要的样子排一次序,然后就别再排了。如果这些行来自一个每次抽取都会重新排序的系统,请先把它们冻结成一份工作副本——否则你今天写下的数字,明天指向的是别的步骤。

  2. 从表头下面第一行开始编号为 1

    表头行不是数据行,不参与计数。文件里的第一个步骤是位置 1,下一个是 2,依此类推。工作时把这些数字放进一列草稿列里;导入并不需要它,但你需要,因为你接下来要手工敲下二十个引用。

  3. 先写只有一个后继的步骤

    从上到下走一遍文件,给每一个一路直行的步骤在连线到里填一个数字。这一步很快,也很难写错,剩下需要动脑的就只有那些分叉。对一个确实终结了流程的步骤,把单元格留空——正是空着的连线到让一行成为终止行。

  4. 把分叉写成用逗号分隔的位置

    在每个判断上,把所有去处填进同一个单元格里:7,6,21 表示三个出口。逗号周围的空白会被去掉,所以“7, 6, 21”也可以。要紧的是顺序,因为你马上要写第二个列表,它必须与这个列表一项一项对上。

  5. 按同样的顺序写连线文字

    连线到是 7,6,21 时,连线文字就写 30天以内,31至90天,超过90天。往下走之前请成对读一遍:第一个位置配第一个标签,第二个配第二个。没有任何东西会替你检查这件事,而一对交叉了的配对,会画出一张自信满满、看着也合理、实则错误的图。

  6. 把文件拖进去,再把箭头读回来

    把 .csv 拖到一张新图表的表格区域上,或者把文本粘贴进去——没有导入向导,也没有列映射环节,因为表头名称是直接匹配的。然后对着政策在画布上追两三条分支。超出范围的位置和没有标签的出口,在这个尺度上一眼就能看见。

应避免的错误

  • 分支标签里的半角逗号

    连线文字是在 CSV 解析器已经把字段的引号去掉之后才按半角逗号切分的,所以“是, 需主管审批”会变成两条分支:“是”和“需主管审批”。给单元格加引号帮不上忙,因为引号已经被 CSV 那一层消化掉了,切分发生在之后。请把标签写成不带半角逗号的样子——用全角逗号,或者用一个破折号。

  • 插入了一行却没有重新编号

    位置是绝对的,所以在中间加一个步骤,会把它下面每一行都挪一位,而每一个既有的连线到值仍然指着原来的数字。图照样画得出来,只是箭头都早落了一步。请把新步骤加在文件末尾,那里不会让任何东西重新编号;或者有意识地重新编号,然后把整列重读一遍。

  • 两个列表长度不一样

    三个位置配两个标签,第三支箭头就没有标签;两个位置配三个标签,多出来的那个被丢弃。两种情况都不会有任何提示。凡是一个判断有两个以上出口,就把两个单元格里的逗号数一数——这棵树里有四行分成三支,问题正是出在那里。

  • 把一个回溯数字当成手误

    一个比它所在行更小的连线到值,会往图的上方画一支箭头,而这是一个正常的循环:一条返工路径、一次重新提交、一个从两个方向都能到达的共用计算。示例里“换货还是退款?”指向 12 就是其中之一。别看见就清理掉;成品文件长什么样,见 /zh/guides/从csv创建流程图。

打开这棵决策树,读它的连线到列

把这棵退款树作为你自己的图表打开,然后把行换成你自己的,两个连接列保持原样。

打开这棵决策树,读它的连线到列

相关指南

常见问题

为什么用行的位置,而不用一列 ID?

因为一份从别的系统出来的 CSV 很少带有一个你能用的稳定键,而它确实带有的那些,通常是记录的标识而不是步骤的标识。行的位置永远存在、永远唯一,也不需要和导出文件的产出方达成任何约定。代价是这个位置只在顺序不变时才有意义,这也正是行的顺序在 CSV 流程图里比在任何别的格式里都更要紧的原因。

编号时要把表头行算进去吗?

不算。位置 1 是第一条数据行,就在表头正下方。人们常在这里绊倒,因为在电子表格里表头是第 1 行、第一个步骤是第 2 行——相对文件整体差了一位。如果所有箭头都早落一步,通常就是这个原因。

一个步骤能指向两行以上吗?

可以,决策树里这很常见。示例中“商品处于什么状态?”有三个出口,“主管是否批准这笔付款?”也有三个,其中一个是拒绝。把所有位置用逗号分隔填进同一个单元格,并在连线文字里给出同样数量的标签。实际使用中没有什么上限值得担心;可读性会比格式先撑不住。

如果连线到指向一行并不存在的行会怎样?

这条连线会被丢弃,而且什么都不会报。一个超出文件末尾的位置、一个该填数字却留空的单元格,或者一个从行数更多的旧版导出文件里遗留下来的数字,产生的结果完全一样:一支干脆就不存在的箭头。这是每次改动文件长度之后都要检查的失效模式。整套往返流程,见本站的 CSV 转流程图页面。

连线到里能不能填步骤的名称,而不填数字?

不能——这一列是按位置读取的。在多数真实文件里名称也会有歧义:这棵树里有两行都以“批准”收尾,还有好几行读起来像是同一个问题的变体。数字从构造上就没有歧义,这正是这套身份是位置式而不是文本式的原因。

本指南所用的模板

CSV 决策树模板(退款资格判定) — 一棵用 CSV 导出文件搭起来的退款资格决策树:25 行、12 个带标签的判断,其中四个是三岔的,还有五个各自独立的终点。它演示的是连线到与连线文字如何按位置一一配对。

退款资格决策树(从申请到结付): 申请 → 资格 → 品况 → 裁定 → 审批 → 结付
如何在 CSV 中定义流程图的连线