我是这方面的新手,我会尽力正确地提出这个问题。我需要根据文件夹/文档结构创建一个数字索引结构。
我有以下信息:
C:\Question\General Information1
C:\Question\General Information1\Articles of Inc
C:\Question\General Information1\Articles of Inc\document .pdf
C:\Question\General Information1\Articles of Inc\document 2.pdf
C:\Question\General Information1\Articles of Inc\document 3.jpg
C:\Question\General Information1\Board Minutes
C:\Question\General Information1\Board Minutes\document .pdf
除上述内容外,我需要创建类似这样的内容:
1.1 C:\Question\General Information1
1.1.1 C:\Question\General Information1\Articles of Inc
1.1.1.1 C:\Question\General Information1\Articles of Inc\document .pdf
1.1.1.2 C:\Question\General Information1\Articles of Inc\document 2.pdf
1.1.1.3 C:\Question\General Information1\Articles of Inc\document 3.jpg
1.1.2 C:\Question\General Information1\Board Minutes
1.1.2.1 C:\Question\General Information1\Board Minutes\document .pdf
我有数千行文档和文件夹,需要创建数字索引。
答案1
我假设您的文件名在列中A
,从第 1 行开始。如果不是,请对以下内容进行适当的调整。
设置B1
=LEN(A1)-LEN(SUBSTITUTE(A1, "\", ""))
并将其向下拖动/填充以覆盖所有数据。 将文本中的SUBSTITUTE(A1, "\", "")
所有\
字符替换为空,因此C:\Question\General Information1
变为,显然,它少了两个字符。从原始文件名中减去这个缩短的字符串的长度是确定数据中字符C:QuestionGeneral Information1
数的一个技巧。\
设置C1
=IF($B1>=(COLUMN()-2), 1, "")
并向右拖动/填充足够远以覆盖\
您期望数据中的最大级别数(即字符数)。如果您不知道,只需将其拖到Z1
;这将允许 24 个级别(26-2)。如果您需要更多,请对下一节进行适当的调整。
COLUMN()
返回数字当前列的(C
为 3,Z
为 26,等等)因此(COLUMN()-2)
范围从 列 中的 1C
到 列 中的 24。Z
这将生成列表中第一个文件名的数字索引。(请记住,B1
包含目录级别数。)公式1
在相对列号(1-24 范围内的列号)≤目录级别数的列中计算为,否则为空白。因此,第 1 列和第 2 列(C
和D
)为1
,其余列为空白:
C D E F ...
1 1
我们最终会将其翻译成1.1
。
设置C2
=IF($B2>(COLUMN()-2), C1, IF($B2=(COLUMN()-2), SUM(C1,1), ""))
并向右拖动/填充足够远以覆盖最大层级数(即匹配第 1 行);然后向下拖动/填充以覆盖所有数据(即匹配第 列B
)。这旨在生成索引号的组件号;例如,对于 的索引, C2
= D2
= E2
= 1
,F2
...Z2
为空白1.1.1
。它说,
- 如果级别号大于列号,则保留上一行的索引组件。例如,由于第 6 和第 7 个值都至少有三个反斜杠,因此列
C
、D
和在第 6 行和第 7 行E
具有相同的值(1
、1
和2
)。 - 如果我们位于与级别编号对应的列中,则需要在此处将上一行的索引组件加一。例如,由于第 3、第 4 和第 5 个值都有四个反斜杠,因此单元格
F3
、F4
和F5
具有连续值1
、2
和3
。(请记住,列F
的相对列数为四,因为我们要减去2
。)- 我使用
SUM(C1,1)
而不是C1+1
因为SUM(C1,1)
将评估1
是否C1
为空字符串,而C1+1
会导致错误。
- 我使用
- 否则,我们在级别号之外的列中,因此显示空白。
现在,设置AC1
为
=IF(C1="", "", C1&".")
这只是说,如果单元格C1
有一个索引组件,则附加一个句点(“.
”),否则显示空白。将其拖拽/填充到足够右端以匹配列C
…数据;例如,到AZ1
。设置AB1
为
=AC1&AD1&AE1&AF1&AG1&AH1&AI1&AJ1
并根据需要将其扩展。(是的,这很乏味;不幸的是,Excel 还不够聪明,无法CONCATENATE(AC1:AZ1)
工作。幸运的是,你只需要做一次。)这会将 Columns 中的标点索引组件连接起来AC
……,从而为您提供几乎你想要的。唯一的问题是,由于每个非空白AC
值AZ
都以句点结尾,因此连接也会如此。因此设置AA1
为
=LEFT(AB1, LEN(AB1)-1)
这是包含除最后一个字符之外的所有字符的最左边的子字符串AB1
;即,它删除了最后一个句点。将列AA
-AZ
向下拖动以覆盖数据。这应该是您想要的: