解析 url 中的字符串 excel
Parse url string in excel
我想从 Excel 中的 url 字符串中解析一个数字,然后使用公式将其粘贴到另一个单元格中。例如,我有 https://system.google.com/childrecords.nl?id=668&t=CustomField&rectype=-704&weakdeps=T。我想使用一个公式来提取“668”并将其放在相邻的单元格中。关于如何解决这个问题有什么想法吗?
=LEFT(MID(A1,SEARCH("id=",A1)+3,15),SEARCH("&",MID(A1,SEARCH("id=",A1)+3,15))-1)
如果您总是想要第一组数字并且两边总是有一个 =
符号和一个 &
那么这将起作用:
=MID(A1,SEARCH("=",A1)+1,SEARCH("&",A1)-SEARCH("=",A1)-1)
否则,这是一个可以工作的 UDF。您可以将其粘贴到 Visual Basic 编辑器 Alt+F11
的常规模块中,并像使用任何其他公式一样使用它:
Option Explicit
Public Function FindFirstSetOfNumbers(MyRange As Range) As String
Dim NumCounter As Integer
Dim Start As Integer
Start = Application.Evaluate("=MIN(FIND({0,1,2,3,4,5,6,7,8,9}," & MyRange.Address & "&""0123456789""))")
For NumCounter = Start To Len(MyRange)
If IsNumeric(Mid(MyRange, NumCounter, 1)) Then
FindFirstSetOfNumbers = FindFirstSetOfNumbers & Mid(MyRange, NumCounter, 1)
Else
Exit For
End If
Next NumCounter
End Function
只需在任意单元格中键入 =FindFirstSetOfNumbers(YourRange)
,然后按 enter
或 =VALUE(FindFirstSetOfNumbers(YourRange))
即可将其转换为数字数据类型。
我使用以下公式:
=MID($A2,FIND(B&"=",$A2)+LEN(B)+1,FIND("&",$A2,FIND(B&"=",$A2)+LEN(B))-FIND(B&"=",$A2)-LEN(B)-1)
假设 URL 在 A 列上并且列标题是所需的参数。
$A2 = the URL string
B = parameter name
$ 位于正确的位置,允许将公式复制到多个列和所有行。
已知蛀牙:
- 如果名称是另一个参数名称的一部分,则必须在短参数名称前加上前缀
&
。例如,在 ?popup_id=1&up_id=2
中,up_id
的列标题将不正确 1
,但 &up_id
将按预期显示为 2
。
- 任何 non-plain-english 值都可能被编码,但没有原生的 excel 函数来解码它们。所以
a%20value
不会更改为 a value
.
用法示例:https://docs.google.com/spreadsheets/d/1DuUa8PWdf07PnZzFNouGF-byGs-3ygH44DvJbvdR00Q/edit?usp=sharing
我想从 Excel 中的 url 字符串中解析一个数字,然后使用公式将其粘贴到另一个单元格中。例如,我有 https://system.google.com/childrecords.nl?id=668&t=CustomField&rectype=-704&weakdeps=T。我想使用一个公式来提取“668”并将其放在相邻的单元格中。关于如何解决这个问题有什么想法吗?
=LEFT(MID(A1,SEARCH("id=",A1)+3,15),SEARCH("&",MID(A1,SEARCH("id=",A1)+3,15))-1)
如果您总是想要第一组数字并且两边总是有一个 =
符号和一个 &
那么这将起作用:
=MID(A1,SEARCH("=",A1)+1,SEARCH("&",A1)-SEARCH("=",A1)-1)
否则,这是一个可以工作的 UDF。您可以将其粘贴到 Visual Basic 编辑器 Alt+F11
的常规模块中,并像使用任何其他公式一样使用它:
Option Explicit
Public Function FindFirstSetOfNumbers(MyRange As Range) As String
Dim NumCounter As Integer
Dim Start As Integer
Start = Application.Evaluate("=MIN(FIND({0,1,2,3,4,5,6,7,8,9}," & MyRange.Address & "&""0123456789""))")
For NumCounter = Start To Len(MyRange)
If IsNumeric(Mid(MyRange, NumCounter, 1)) Then
FindFirstSetOfNumbers = FindFirstSetOfNumbers & Mid(MyRange, NumCounter, 1)
Else
Exit For
End If
Next NumCounter
End Function
只需在任意单元格中键入 =FindFirstSetOfNumbers(YourRange)
,然后按 enter
或 =VALUE(FindFirstSetOfNumbers(YourRange))
即可将其转换为数字数据类型。
我使用以下公式:
=MID($A2,FIND(B&"=",$A2)+LEN(B)+1,FIND("&",$A2,FIND(B&"=",$A2)+LEN(B))-FIND(B&"=",$A2)-LEN(B)-1)
假设 URL 在 A 列上并且列标题是所需的参数。
$A2 = the URL string
B = parameter name
$ 位于正确的位置,允许将公式复制到多个列和所有行。
已知蛀牙:
- 如果名称是另一个参数名称的一部分,则必须在短参数名称前加上前缀
&
。例如,在?popup_id=1&up_id=2
中,up_id
的列标题将不正确1
,但&up_id
将按预期显示为2
。 - 任何 non-plain-english 值都可能被编码,但没有原生的 excel 函数来解码它们。所以
a%20value
不会更改为a value
.
用法示例:https://docs.google.com/spreadsheets/d/1DuUa8PWdf07PnZzFNouGF-byGs-3ygH44DvJbvdR00Q/edit?usp=sharing