Я предполагаю, что ваши имена файлов в столбце 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)
колеблется от 1 в столбце C
до 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
и E
имеют одинаковые значения (1
, 1
и 2
) в строках 6 и 7.
- Если мы находимся в столбце, соответствующем номеру уровня, то здесь мы должны добавить его к компоненту индекса из предыдущей строки.
Например, поскольку ваши 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)
.
К счастью, вам нужно сделать это только один раз.)
Это объединяет акцентированные компоненты индекса из столбцов AC
..., давая вам почти то, что вы хотите. Единственная проблема заключается в том, что, поскольку каждое из непустых значений AC
- AZ
заканчивается точкой, конкатенация также будет. Поэтому установите AA1
на
=LEFT(AB1, LEN(AB1)-1)
Это самая левая подстрока AB1
содержащая все символы, кроме последнего; т.е. удаляет последний период.
Перетащите столбцы AA
- AZ
вниз, чтобы покрыть данные. Это должно быть то, что вы хотите: