刪除 Excel 中的 URL 參數

刪除 Excel 中的 URL 參數

我有一個以下形式的 URL:

http://www.example.com/page.html?param1=asdf&param2=asdfg&param3=asdfgh

我想從 URL 中提取 param2 或 3 的值,並從 URL 中刪除該特定參數。關於如何使用 Excel 執行此操作有什麼想法嗎?

答案1

我不相信 Excel 具有用於處理 URL 的內建函數,因此您必須創造性地組合常規字串操作函數,例如LEN(),MID()SEARCH()

假設您的 URL 位於 cell 中A1,並且要提取其值的參數位於 cell 中B1,請嘗試以下公式。

要取得給定參數的值:

=IFERROR(MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))); "")

若要從 URL 中刪除參數及其值:

=IFERROR(REPLACE(A1; SEARCH(B1 & "="; A1); IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) + 1; LEN(A1)); ""); A1)

注意:根據您的區域設置,您可能需要將公式中的所有分號替換為逗號。


詳細解釋

要取得給定參數的值,我們首先需要在 URL 中找到它:

=SEARCH(B1 & "="; A1)

SEARCH()函數在第二個參數(URL)中定位第一個參數(給定參數)並傳回它出現的起始位置的編號。請注意,我們將等號附加到參數名稱後,以確保我們正在搜尋正確的內容。否則,搜尋param1可能會返回位置,例如,param10如果它出現在 URL 的較早位置。

找到參數後,我們需要傳回 URL 的部分(或子字串),該部分從參數值開始的位置開始,到下一個 & 符號之前結束。為此,我們使用MID()函數,它接受三個參數:要傳回子字串的字串、開始位置以及要傳回的字元數。

=MID(A1; SEARCH(B1 & "="; A1); LEN(A1))

我們也使用LEN()函數,它只傳回給定字串的長度(在本例中為 URL)。目前這只是一個佔位符(第三個參數直到 Excel 2010 才變成可選),但稍後當我們需要最後一個參數的值時會派上用場。

首先,我們需要將起始位置從參數本身的開頭移動到其值開始的位置。為此,我們將其長度以及 1(用於符號=)添加到參數在字串中的位置。

=MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; LEN(A1))

更好的是,傳回的值從正確的位置開始。為了讓它停在正確的位置,我們需要找到下一個與號,它表示下一個參數的起始位置。

=SEARCH("&"; A1; SEARCH(B1 & "="; A1))

我們SEARCH()再次使用函數,這次添加第三個參數,指定開始搜尋的位置 - 我們對給定參數之前的 & 符號不感興趣,只對它後面的 & 符號感興趣。

為了從上面得到參數值的長度,我們需要減去參數開始的位置、參數的長度,並再次減去1作為符號=

=SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1

這適用於除最後一個參數之外的所有參數,因為 URL 末尾沒有尾隨 & 符號。對於這種情況,我們可以使用IFERROR()函數來偵測 Excel 給出的錯誤,並傳回一些固定數字。一個好的選擇是LEN(A1)- 字串的長度保證大於其任何子字串的長度,如果我們將其作為第三個參數傳遞給MID(),它將返回從給定位置到字串末尾的所有字元字串,這正是我們所需要的。

=IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))

結合上面的內容,我們得到以下公式:

=MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1)))

最後一件事:如果B1包含 URL 中不存在的參數,則以上傳回錯誤#VALUE。要在這種情況下返回空字串(或任何其他適當的值),請將整個字串包裝在另一個中IFERROR()

=IFERROR(MID(A1; SEARCH(B1 & "="; A1) + LEN(B1) + 1; IFERROR(SEARCH("&"; A1; SEARCH(B1 & "="; A1)) - SEARCH(B1 & "="; A1) - LEN(B1) - 1; LEN(A1))); "")

從 URL 中刪除參數及其值的公式非常相似,使用REPLACE()函數用空字串替換 URL 的給定子字串(其定義方式與上面大致相同)。

您可以將常用區塊(例如SEARCH(B1 & "="; A1))移至自己的列並引用這些儲存格來稍微簡化公式,而不是多次鍵入公式。然後可以從視圖中隱藏這些附加列。

相關內容