Как получить расширение файла в MS Excel?

10

У меня есть столбец, содержащий пути к файлам. Я хочу сделать еще один столбец, который содержит только расширения путей. Как я могу сделать это в Microsoft Excel?

Нам Г ВУ
источник
1
Для тех, кто ищет, как это сделать в электронной таблице Google, вы можете использоватьREGEXEXTRACT(A1, "\.([^.]*)$")
Джо

Ответы:

20
=REPLACE(RIGHT(A1,5),1,SEARCH(".",RIGHT(A1,5)),"")

Эта формула будет полезна, если у вас есть более одной точки в имени файла

Кирилл
источник
2
Обратите внимание, что это работает только для расширений файлов, которые являются четырьмя символами или короче.
Тим Робинсон
1
Вы можете просто изменить 5 на 6 или что-то еще, верно?
адвокат дьявола
Нет, это вызывает проблемы.
Адвокат дьявола
4

Взято из другого ответа (изменено для поиска точек, а не пробелов):

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
user273281
источник
работает удовольствие! Спасибо за быстрое решение для копирования / вставки. Работает для расширений файлов с расширениями файлов от 2 до 7 символов с полными путями и обозначениями пространств имен в имени файла.
Зефан Шредер
2

Кирилл ответ работает только в том случае, если расширение составляет 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

Adarsh
источник
0

Если у вас есть красиво отформатированные расширения, вы можете сделать это быстро, как =RIGHT(A1,3). Более надежное решение найдет индекс самого правого .и затем извлечет оставшиеся символы.

ta.speot.is
источник
Чтение вашего вопроса - это ответ, который я бы дал.
VerGuy
Я думаю, что реальный вопрос здесь: как найти самое правильное "." в Excel.
Петерсон
Расширение не всегда в 3 символа. @pertersohn: Да, ты прав.
Нам G VU
0

Я сталкивался с этим, который является самым простым решением, которое я видел ...

=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()].

u8it
источник