Jak uzyskać rozszerzenie pliku w MS Excel?

10

Mam kolumnę zawierającą ścieżki plików. Chcę utworzyć kolejną kolumnę zawierającą tylko rozszerzenia ścieżek. Jak mogę to zrobić w programie Microsoft Excel?

Nam G VU
źródło
1
Dla każdego, kto chce to zrobić w Arkuszu kalkulacyjnym Google, możesz użyćREGEXEXTRACT(A1, "\.([^.]*)$")
Joe

Odpowiedzi:

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

Ta formuła przyda się, jeśli nazwa pliku zawiera więcej niż jedną kropkę

Cyryl
źródło
2
Pamiętaj, że działa to tylko w przypadku rozszerzeń plików, które mają cztery znaki lub krócej.
Tim Robinson
1
Możesz po prostu zmienić 5 na 6 lub cokolwiek, prawda?
Adwokat diabła,
Nie, to powoduje problemy.
Adwokat diabła,
4

Zaczerpnięty z innej odpowiedzi (zmieniony, aby szukać kropek, a nie spacji):

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1,".","|",LEN(A1)-LEN(SUBSTITUTE(A1,".","")))))
użytkownik273281
źródło
działa uczta! Dzięki za szybkie rozwiązanie kopiuj / wklej. Działa z rozszerzeniami plików z 2 do 7 znakowymi rozszerzeniami plików z pełną ścieżką i zapisem przestrzeni nazw w nazwie pliku.
Zephan Schroeder
2

Odpowiedź Cyryla działa tylko wtedy, gdy rozszerzenie ma 3 lub 4 znaki, a odpowiedź user273281 nie działała, gdy .w nazwie pliku znajdowały się (kropki).

Dlatego wymyśliłem nowy sposób na osiągnięcie tego,

=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), ".", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))

Uwaga: odpowiedź user273281 nie działała w przypadku, gdy nazwa pliku to 1. Macro based file.zip. Powraca. Macro based file.zip

Adarsh
źródło
0

Zakładając, że masz ładnie sformatowane rozszerzenia, możesz to zrobić szybko jak =RIGHT(A1,3). Bardziej niezawodne rozwiązanie znalazłoby indeks skrajnie prawy, .a następnie wyodrębnił pozostałe znaki.

ta.speot.is
źródło
Czytanie twojego pytania jest odpowiedzią, którą bym odpowiedział.
VerGuy
Myślę, że prawdziwe pytanie brzmi: jak znaleźć „najbardziej na prawo”. w programie Excel.
petersohn
Rozszerzenie nie jest zawsze składane z 3 znaków. @pertersohn: Tak, masz rację.
Nam G VU
0

Natknąłem się na to, jest to najprostsze rozwiązanie, jakie widziałem ...

=SUBSTITUTE(RIGHT(SUBSTITUTE(A5,".",REPT(".",50)),50),".","")

Działa, ponieważ oddziela wszystkie znaki po ostatnim okresie od wszystkich innych znaków o 50 okresów lub dowolną wybraną liczbę. Następnie możesz wybrać najbardziej wysunięte w prawo 50 znaków, wiedząc, że wybierasz tylko znaki rozszerzeń i kilka kropek. Zastąp okresy i gotowe.

Źródło

Alternatywnie: parsowanie XML


Zgrabną sztuczką, której czasami używam do parsowania ciągów, jest wykorzystanie FilterXML()funkcji (Excel 2013 i późniejsze). Podstawową strategią jest Substitute()sformatowanie łańcucha w taki sposób, aby był on parsowany między elementami łańcucha xml, a następnie można użyć składni xpath do wygodnego poruszania się po parsowanych elementach. Korzystając z tej strategii, uzyskanie rozszerzenia wyglądałoby tak ...

=FILTERXML("<A><p>" & SUBSTITUTE(A1,".","</p><p>.")&"</p></A>","//p[last()]")

Jeśli nie znasz xml, może to wydawać się zastraszające, ale jeśli potrafisz zrozumieć, co się dzieje, uważam, że jest czystszy, bardziej elastyczny i łatwiejszy do zapamiętania niż alternatywne metody wykorzystujące len (), substitute (), itp. Jednym z powodów, dla których jest to przyjemniejsze, jest to, że istnieje tylko jedno odwołanie do komórki.

Nielegalne postacie

Istnieją dwa znaki, które są dozwolone w ścieżkach, ale nie w xml: &i'

Powyższe równanie zadziała, jeśli te postacie nie będą obecne, w przeciwnym razie trzeba będzie poradzić sobie z czymś takim ...

=FILTERXML("<A><p>" & SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J8,"'",""),"&",""),".","</p><p>.")&"</p></A>","//p[last()]")

Przykład

Załóżmy, że mamy nieprzyjemną ścieżkę pliku:

C: \ Folder1 \ Folder2 \ (brzydkie znaki! @ # $% ^ () _ + = {} ;;, `) \ two.dots.LongExt

1.) Substitution()Część zamieni go na ciąg xml taki jak ten ...

<A>
    <p>
        C:\Folder1\Folder2\(ugly characters !@#$%^()_+={};;,`)\two
    </p>
    <p>
        .dots
    </p>
    <p>
        .txt
    </p>
</A>

2.) Po sformatowaniu w ten sposób, wybranie ostatniego pelementu przy użyciu składni xpath jest banalne //p[last()].

u8it
źródło