如何从单元格中剥离其余信息并仅保留一部分?

如何从单元格中剥离其余信息并仅保留一部分?

如果可能的话我想剥离所有内容并获取订单 ID。问题是:订单 ID 的位置,有时它以A或开头1

  • 单元格示例 A1:{"Ref":"bad order","OrderId":"ABSER27"}
  • 单元格示例 A2:{"OrderId":"ABSER27"}
  • 单元格示例 A3:{"order_id":"12345678","customer_email":"[email protected]"}

  • 期望结果:B1 = ABSER27
  • 期望结果:B3 = ABSER27
  • 期望结果:B3 = 12345678

答案1

Excel 的“文本到列”功能可以让生活变得更轻松。

步骤 1 - 将字符串分成几列

首先,删除前导{和尾随的}。您可以使用 replace 函数来完成此操作,或者如果您想使用函数来完成此操作,则=MID(A1,2,LEN(A1)-2)

这将产生如下源数据: 在此处输入图片描述

接下来,选择 A 列(不带{ }),然后从功能区中选择“数据”>“数据工具”>“文本到列”。使用以下选项: 在此处输入图片描述 在此处输入图片描述

然后,您将看到整齐地显示在 4 列中的信息: 在此处输入图片描述

步骤 2 - 从列中选择订单 ID

之后,您可以做任何您想做的事情来获取订单 ID。一个简单的方法是将公式放在 G 列中,其中单元格 G1 具有以下公式:

=INDIRECT("RC"&MATCH("order*id",A1:F1,0)+1,FALSE)

由于“OrderId”可能与示例中的“order_id”格式相同,因此我们使用通配符*进行匹配。然后,公式将获取“OrderId”右侧的单元格。 在此处输入图片描述

答案2

对于这类问题,我使用正则表达式查找/替换插件
我与它没有任何关系,只是一个狂热用户

您可以使用正则表达式,例如:
=RegExReplace(UPPER(A1),".*ORDER_?ID"":""([^""]+)"".*","$1")

在此处输入图片描述

答案3

在单元格 B2 中使用 Mid 函数

文本 =A2

起始编号 = 使用搜索功能(搜索不区分大小写,但查找区分大小写)从位置 1 开始定位单元格 A2 中“id”的位置,然后将字符数添加到订单编号中。

字符数是起始数字与下一个双引号(ASCII 字符 34)位置之间的差值。

=MID(A2,SEARCH("id",A2,1)+5,(FIND(CHAR(34),A2,(SEARCH("id",A2,1)+5))-(SEARCH("id",A2,1)+5)))

编辑以允许在电子邮件字段或订单 ID 中添加额外的“ID/id”,而无需插件或 VBA

将真和假的 MID 语句包装在 IF 中,以检查是否存在多个 ID,并且电子邮件地址不是第一个逗号分隔的字段。

 =IF(
AND((LEN(A2)-LEN(SUBSTITUTE(UPPER(A2),("ID"),"")))/LEN("ID")>1,ISERROR(FIND("@",LEFT(A2,FIND(",",A2)-1),1))=FALSE),

MID(A2,
FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5,
FIND(CHAR(34),A2,FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5)-(FIND("~",SUBSTITUTE(UPPER(A2),"ID","~",2),1)+5)
),

MID(A2,
SEARCH("ID",A2,1)+5,
(FIND(CHAR(34),A2,(SEARCH("ID",A2,1)+5))-(SEARCH("ID",A2,1)+5))
)
)

答案4

根据您提供的信息 — 订单 ID 从字段中的第一个开始,一直到第一个以下A(引号) — 这并不难。如果我们使用一些“辅助列”,那就最简单了:1"

  • C1=IFERROR(FIND("A",$A1), LEN($A1)+1)
  • D1=IFERROR(FIND("1",$A1), LEN($A1)+1)
  • E1=MIN($C1,$D1)
  • F1=FIND("""", $A1, $E1)

C1并分别在单元格 中 D1找到第一个A和。如果没有,则返回错误,并且使用,我们将值设置为 的长度加一;即最后一个字符后下一个字符的偏移量。  是其中较小的一个;因此,如果至少找到一个或,则指向第一个。如果没有,那么它也是长度+1。1A1FINDIFERRORA1E1A1E1

现在找到上述之后的F1第一个。如果没有,则会出现错误。如果没有或,则长度为+1,因此也会出现错误。""A1E1A1F1

所以最后我们设置

  • B1=IF(ISERROR($F1), "ERROR", MID($A1, $E1, $F1-$E1))

如果F1是错误,则仅显示一个ERROR指示符。否则,从 的 MIDdle 中提取子字符串,从或A1的位置开始,长度直到(但不包括)分隔符。A1"

相关内容