У меня есть столбец, содержащий пути к файлам. Я хочу сделать еще один столбец, который содержит только расширения путей. Как я могу сделать это в Microsoft Excel?
5 ответов
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")
Эта формула будет полезна, если у вас есть более одной точки в имени файла
Взято из другого ответа (изменено для поиска точек, а не пробелов):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
Кирилл ответ работает только в том случае, если расширение составляет 3 или 4 символа, а пользователь user273281 не работал, когда были .
(точки) в имени файла.
Поэтому я нашел новый способ достижения этого,
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))
Примечание: aswer user273281 не работает для случая, когда имя файла было 1. Macro based file.zip
. Это возвращается . Macro based file.zip
Я сталкивался с этим, который является самым простым решением, которое я видел ...
=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")
Это работает, потому что он отделяет любые символы после последнего периода от всех других символов на 50 периодов, или любое другое число по вашему выбору. Затем вы можете выбрать самые правые 50 символов, зная, что вы выбираете только ваши дополнительные символы и набор периодов. Замените периоды, и вы готовы идти.
Альтернатива: синтаксический анализ XML
Изящный прием, который я иногда использую для анализа строк в целом, заключается в использовании функции FilterXML()
(Excel 2013 и более поздние версии ). Основная стратегия заключается в использовании Substitute()
для форматирования вашей строки таким образом, чтобы она анализировалась по элементам в строке XML, а затем вы можете использовать синтаксис xpath для удобной навигации по вашим проанализированным элементам. Используя эту стратегию, получить расширение будет выглядеть так ...
=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")
Если вы не знакомы с xml, это может показаться пугающим, но если вы можете понять, что происходит, я нахожу его чище, более гибким и легче запоминающимся, чем альтернативные подходы с использованием len(), substitute(), и т. д. Одна из причин, почему это лучше, потому что есть только одна ссылка на ячейку.
Незаконные персонажи
Есть два символа, которые разрешены в путях, но не в xml: &
и '
Приведенное выше уравнение будет работать, если эти символы отсутствуют, в противном случае их нужно будет обработать примерно так:
=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")
пример
Предположим, у нас есть неприятный путь к файлу, например:
C:\Folder1\Folder2\(некрасивые символы!@ # $% ^()_+= {} ;;, `)\two.dots.LongExt
1.) Часть Substitution()
преобразует ее в строку xml, как это ...
<A>
<p>
C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
</p>
<p>
.dots
</p>
<p>
.txt
</p>
</A>
2.) После такого форматирования тривиально выбрать последний элемент p
помощью синтаксиса xpath //p[last()]
.
Если у вас есть красиво отформатированные расширения, вы можете сделать это быстро как =RIGHT(A1,3)
. Более надежное решение найдет индекс самого правого .
а затем извлечь оставшиеся символы.