Excel:父子树视图:动态添加节点(父)编号

时间:2014-07-10 08:14:18

标签: excel tree parent-child nodes

我正在为某些数字资产系统开发关键字树。基本上我必须以这种格式导入它(强制性):

1,0,Top Level A
2,0,Top Level B
3,0,Top Level C
4,1,Sub Level A
5,1,Sub Level B
6,4,Deepest Level A
7,5,Deepest Level B
8,3,Sub Level from Top Level C

在我的案例中看起来像这样(这是摘录,我添加了一些空格以使其更具可读性):

 1,     0,    Natural and Organic Cosmetic (NOC)
 2,     1,    bodycare
 3,     1,    facecare
 4,     1,    babycare
 5,     1,    pregnancy
 6,     1,    lipcare
 7,     1,    hair
 8,     1,    teeth
 9,     1,    wellness
10,     1,    mencare (specific)
11,     0,    Model
12,    11,    application without product
13,    11,    application with product
14,    11,    adult
15,    14,    man
16,    14,    woman

但是这个列表需要定期维护和更新,为了简化这个过程,我创建了一个Excel文件,其中的列定义了这样的级别深度:

 1     0    Natural and Organic Cosmetic (NOC)
 2     1        bodycare
 3     1        facecare
 4     1        babycare
 5     1        pregnancy
 6     1        lipcare
 7     1        hair
 8     1        teeth
 9     1        wellness
10     1        mencare (specific)
11     0    Model
12    11        application without product
13    11        application with product
14    11        adult
15    14            man
16    14            woman

现在我的问题是我想在“身体护理”下添加更多的子级别项目。因此,我必须手动更新所有父母身份证号码,不幸的是,这些身份证号码在第一行中的唯一和顺序标识符上被忽略。

如何在添加新行时动态更新父节点ID号?

1 个答案:

答案 0 :(得分:1)

此解决方案仅适用于树的固定深度。因此,如果您要添加3级节点,则必须相应地扩展公式...

每当插入新行时,您都必须向下拖动/复制A列和B列中的公式。除非您可以使用表格(Excel 2007及更新版本),否则如果整个列的公式相同,则会自动添加公式。

行。我们的想法是检查我们所处的深度级别并找到父级别中的第一个(向上看)条目。不是很优雅,但它有效。

在A栏中,您只需使用公式=ROW()-1即可获得“唯一的顺序节点编号”。

对于B列(父节点号),您可以使用LOOKUP,如下所示:

=IF(C2<>"",0,IF(D2<>"",LOOKUP(2,1/(C$2:C2<>""),A$2:A2),IF(E2<>"",LOOKUP(2,1/(D$2:D2<>""),A$2:A2))))

条件(C$2:C7<>"")将返回如下数组,其中1表示匹配,0表示不匹配:

{0;0;1;0;0;0;1;0}

将1除以该数组将产生如下数组:

{#DIV/0!;#DIV/0!;1#DIV/0!;#DIV/0!;#DIV/0!;1#DIV/0!}

如果您使用LOOKUP的查找值大于该范围内的任何值,它将返回最后一个数值,在这种情况下,该值是最后一个匹配的最后一个1