|
层级展开需要写递归算法的。具体可以参考下:
http://www.office-cn.net/thread-66634-1-1.html
主界面里有一个生成树结构的函数。
- Public Sub SubTree(rs As DAO.Recordset, key As String)
- '本过程添加一些子节点
- '参数:rs是ADO记录集,key是节点的关键字
- Dim Book As Variant
- '遍历所有的记录,如果关键字相同,则添加子节点
- rs.MoveFirst
- Do Until rs.EOF
- If "R" & rs(1) = key Then
- '如果没有为该节点指定图标,则用一个文件夹图标
- Set nod = Tree.Nodes.Add(key, tvwChild, "R" & rs(0), rs(2), Nz(Trim(rs(3)), "folder"))
- '记录下当前的记录指针
- Book = rs.Bookmark
- '递归调用过程生成子节点
- SubTree rs, "R" & rs(0)
- '恢复记录指针
- rs.Bookmark = Book
- End If
- rs.MoveNext
- Loop
- End Sub
复制代码 前段时间用Python写了一个,不过一时半会儿没法将它转为VBA,供参考。
- # -*- coding: utf-8 -*-
- """
- Created on Mon Sep 3 22:17:44 2018
- @author: Roych
- """
- import pandas as pd
- import numpy as np
- df = pd.DataFrame({'cls': ['a', 'b', 'c', 'd' ,'e', 'f'],
- 'pCls': [np.nan, 'a', 'b', np.nan, np.nan, 'e']})
- print(df)
- '''树结构 cls--子类名称,pCls--父类名称
- cls pCls 结果显示
- 0 a NaN a(一级)
- 1 b a a--b(二级)
- 2 c b a--b--c(三级)
- 3 d NaN d
- 4 e NaN e
- 5 f e e--f
- '''
- def getData(cls):
- if pd.isna(df[df['cls']==cls]['pCls'].values) == True:
- df1 = df[df['cls']==cls]
- result0, result1 = cls, ''.join(df1['cls'])
- else:
- df1 = df[df['cls']==cls]
- result0, result1 = cls, getData(''.join(df1['pCls']))
- result1 = result1+'--'+result0
- return result1
- print(getData('c'))
- #返回:a--b--c
复制代码 |
|