2

Я новичок в этом, и я сделаю все возможное, чтобы правильно задать этот вопрос. Мне нужно создать структуру числового индекса из структуры папок / документов как таковой.

У меня есть эта информация:

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 ответ1

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) колеблется от 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 , F2Z2 не заполнены для индекса 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 вниз, чтобы покрыть данные.  Это должно быть то, что вы хотите:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .