3

我有一列充满了具有路径的数据。我想获取路径中的最后一个元素、倒数第二个元素和第一个元素。例如,对于以下数据:

\Product\Release\Iteration
\Product\Folder1\Folder2\Anotherfolder\Release2\Iteration5
\Product
\Product\Somefolder\Release3\Iteration5

我想在单元格中获得以下内容

在单元格 B1:“产品”,单元格 C1:“发布”,单元格 D1:“迭代”

在单元格 B2:“产品”,单元格 C2:“Release2”,单元格 D2:“Iteration5”

在单元格 B3:“产品”,单元格 C3:空白,单元格 D3:空白

在单元格 B4:“产品”,单元格 C4:“Release3”,单元格 D4:“Iteration5”

获取第一个和最后一个组件很容易。我主要是在努力获取倒数第二个组件(上例中的 C 列)。

4

7 回答 7

3

在 B1 中并复制下来:

=TRIM(MID(SUBSTITUTE(A1,"\",REPT(" ",99)),99,99))

在 C1 中并复制下来:

=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))=2,TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",99)),99)),IF(LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))>2,TRIM(LEFT(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",99)),198),99)),""))

在 D1 中并复制下来:

=IF(OR(LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))={1,2}),"",TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",99)),99)))
于 2013-08-20T21:12:03.427 回答
2

假设您的数据在 ColumnA 中,请使用 Text to Columns\作为分隔符来拆分列 B:G。假设最多有 8 个元素,将 =B1 放入 K1 和 L1:

=IF(AND(ISBLANK(D1),ISBLANK(C1)),"",IF(ISBLANK($D1),$C1,IF(ISBLANK(C1),"",INDIRECT("R"&ROW()&"C"&COLUMN()-COUNTBLANK($B1:$I1)-4,0))))  

将 L1 复制到 M1 和 K1:M1 向下以适应。

在顶部复制粘贴特殊值并删除 A:I 列。

于 2013-08-20T21:40:18.253 回答
1

组成了两个公式来检索您想要的路径的任何部分:

以第一个为从左开始:

=IFERROR(MID(A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),C$2))+1,IFERROR(FIND("\",A3,FIND(CHAR(1) ,SUBSTITUTE(A3,"\",CHAR(1),C$2))+1)-FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),C$2))-1,LEN (A3))),"")

以第一个为从右开始:

=IFERROR(MID(A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3,"\",""))+1-D $2))+1,IFERROR(FIND("\",A3,FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3,"\" ,""))+1-D$2))+1)-FIND(CHAR(1),SUBSTITUTE(A3,"\",CHAR(1),LEN(A3)-LEN(SUBSTITUTE(A3,"\" ,""))+1-D$2))-1,LEN(A3))),"")

是一个谷歌电子表格,您可以在其中看到它是如何工作的。

注意:我必须对公式进行一些更改以使其与 google-spreadsheet 兼容,即:

  • 换成CHAR(1)别的,我用"/"的替代品
  • 添加一个IF()以检查SUBSTITUTE(,,,0)0参数),因为这会在 MS Excel 中出现错误,但不会在 google 电子表格中出现。
于 2013-08-21T16:38:31.063 回答
0

这有一个很好的例子,它使用了 split 命令。您只需要将|字符更改为\并使用循环将各个值放在您想要的位置。

基于 VBA 2010 中的字符中断字符串

于 2013-08-20T21:09:28.293 回答
0

如果您只需要将数据解析为单元格,则可以使用“\”分隔符将文本文件导入 Excel。否则,您需要使用 CHARINDEX() 和 SUBSTRING 循环查找每个反斜杠的位置并解析出中间的数据。

您还可以使用 SSIS 并将带有“\”分隔符的文本文件转换为 Excel 以实现自动化。使用 TSQL,您需要按照我的建议进行循环

于 2013-08-20T21:05:45.913 回答
0

这应该对你有用(假设你不使用 * 在你的文件名中,我认为无论如何在 Windows 中是不允许的):

=RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1))

那是倒数第二个元素。

您可以通过更改粗体数字来获得所需的任何元素:

=RIGHT(A2,LEN(A2)-FIND(" ",SUBSTITUTE(A2,"\"," ",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))- 3 ) ,1))

编辑/添加

如果你想去掉上面公式中第 n 个元素右边的值,你可以这样做:

=IFERROR(LEFT(RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1)),FIND("\",RIGHT(A2,LEN(A2)-FIND("*",SUBSTITUTE(A2,"\","*",(LEN(A2)-LEN(SUBSTITUTE(A2,"\","")))-1),1)),1)-1),"error checking, lol")
于 2013-08-20T21:18:34.893 回答
0

如果一个人有 Excel O365,可以使用B1

=TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(A1,"\","</s><s>")&"</s></t>","//s[position()=2 or position()>last()-2][node()]"))

可以在 Excel 2013 及更高版本中使用,但不会溢出,您需要INDEX从返回的数组中检索元素。所以它看起来像:

=INDEX(FILTERXML("<t><s>"&SUBSTITUTE($A1,"\","</s><s>")&"</s></t>","//s[position()=2 or position()>last()-2][node()]"),COLUMN()-1)

并向右和向下拖动。

在此处输入图像描述

于 2020-07-21T20:24:26.787 回答