在 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 在单元格中A1,并且要提取其值的参数在单元格中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))移至其自己的列并引用这些单元格(而不是多次输入公式)来简化公式。然后可以将这些额外的列隐藏起来。

相关内容