2016-11-28 118 views
0

給定一個包含文件路徑的excel列,什麼excel公式只返回文件擴展名?Excel VBA公式:從文件路徑中提取文件擴展名?

src\main\java\com\something\proj\UI.java - >java src\main\java\com\something\proj\Server.scala - >scala src\main\java\com\something\proj\include.h\someinclude.hpp - >hpp

注1:此公式的偉大工程的文件路徑,只有一個週期,但不適合的情況下3:
=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(".",A1)))

注2:我知道這些文件路徑是Windows特有的,我不需要跨平臺的解決方案。

相關:triming extension from filename in ExcelHow to extract file name from path?

回答

1

這將找到最後.後一切:

=MID(A1,FIND("{{{",SUBSTITUTE(A1,".","{{{",LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))+1,LEN(A1)) 

enter image description here

+0

很酷,謝謝!我試圖理解它是如何工作的 - 你能解釋一下這個方法嗎? –

+0

@ user3633993首先計算'.'的數量,並用'{{{'替換最後的'.'。然後它發現'{{{'並在其上分割文本字符串。 –

+2

使用「*」之類的不允許的字符進行分割可能會更安全。這是一個特例,但是{{{.foo'是一個有效的文件名。 – Comintern

2

隨着數據A1,用途:

=SUBSTITUTE(RIGHT(SUBSTITUTE(A1,".",REPT(".",999)),999),".","") 

enter image description here

來源:

Jim Cone's old post

+0

太棒了,謝謝!試圖理解這種方法 - 你能解釋一下爲什麼這會起作用嗎? –

+0

@BradWehrwein它可以工作,因爲它可以將上一段時間後的所有字符與所有其他字符分開999點或任意數字。然後您可以選擇最右邊的999個字符,因爲您知道除了擴展字符和一些句點之外您什麼都沒有選擇。替代時期,你就開始了。 – u8it

0

這裏是一個不錯的長期答案。 :-)

=SUBSTITUTE(A1,LEFT(A1,FIND(CHAR(1),SUBSTITUTE(A1,".",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,".",""))))),"") 
0

一個絕招我有時用字符串一般分析是利用了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中\文件夾2 \(醜陋的人物@#$%^()_ + = {} ;;,`)\ two.dots.LongExt

1)的Substitution()部分將其轉換爲XML串像這樣...

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

2.)一旦像這樣格式化,使用xpath語法//p[last()]挑出最後一個p元素是很簡單的。

相關問題