文件夹结构中的数字索引结构

文件夹结构中的数字索引结构

我是这方面的新手,我会尽力正确地提出这个问题。我需要根据文件夹/文档结构创建一个数字索引结构。

我有以下信息:

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 列(CD)为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= 1F2...Z2为空白1.1.1。它说,

  • 如果级别号大于列号,则保留上一行的索引组件。例如,由于第 6 和第 7 个值都至少有三个反斜杠,因此列CD和在第 6 行和第 7 行E具有相同的值(112)。
  • 如果我们位于与级别编号对应的列中,则需要在此处将上一行的索引组件加一。例如,由于第 3、第 4 和第 5 个值都有四个反斜杠,因此单元格F3F4F5具有连续值123。(请记住,列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……,从而为您提供几乎你想要的。唯一的问题是,由于每个非空白ACAZ都以句点结尾,因此连接也会如此。因此设置AA1

=LEFT(AB1, LEN(AB1)-1)

这是包含除最后一个字符之外的所有字符的最左边的子字符串AB1;即,它删除了最后一个句点。将列AA-AZ向下拖动以覆盖数据。这应该是您想要的:

相关内容