我有一个以下形式的 URL:
http://www.example.com/page.html?param1=asdf¶m2=asdfg¶m3=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)
)移至其自己的列并引用这些单元格(而不是多次输入公式)来简化公式。然后可以将这些额外的列隐藏起来。