Power Query - 获取 Excel 电子表格文件名
Power Query - Get the Excel Spreadsheet File Name
我正在寻找 return 当前打开的 Excel 没有目录和扩展名的电子表格文件名的 M 函数。
即如果打开的电子表格位于此处:
C:\HPCLMHSTLI_930.XLSX
我愿意:
HPCLMHSTLI_930
注意:我使用读取设置 Table 的自定义 M 函数实现了此功能,该设置具有两个定义如下的单元格:
=MID(CELL("文件名"),SEARCH("",CELL("文件名"))+1, SEARCH("]",CELL("文件名"))-SEARCH("",CELL("文件名"))-1)
=左(B3,(搜索(".",B3)-1))
所以我不是在寻找这个解决方案。这个解决方案看起来工作量很大,应该有一个更优雅的 M-Language 函数可以 return 当前打开的电子表格文件名。
我不太明白你是如何获得路径的——我猜那是 Cell("fileName"),但通过对 M 代码的一些摆弄,我得出了以下结论:
let
x = "C:\HPCLMHSTLI_930.XLSX",
y=Text.AfterDelimiter(x,"\"),
z=Text.BeforeDelimiter(y,".")
in
z
这似乎可以解决问题。由于文件名中可以包含 1 个以上的句点,这可能太简单了,但如果您的文件名足够简单,这可能会奏效。
但这可以通过以下方式将其包装在一个函数中来改进:
let
ParseFileName = (x) =>
let
y=Text.AfterDelimiter(x,"\"),
z=Text.BeforeDelimiter(y,".")
in z
in
ParseFileName
然后使用类似这样的方式调用它:
let
Source = ParseFileName("C:\HPCLMHSTLI_930.XLSX")
in
Source
我找到了另外两个可能的答案。
第一个比上面那个复杂一点。在这种情况下,我们获取从第一个“\”和最后一个“.”开始的子字符串。
let
x = "C:\HPCLMHSTLI_930.XLSX",
y = Text.PositionOf(x,"\", Occurrence.First),
z = Text.PositionOf(x,".", Occurrence.Last),
a = Text.Middle(x,y+1,z-y-1)
in
a
如果找不到这些字符之一,可能应该有 if 语句。
我找到了一个也适用于更简单情况的最终解决方案。
let
x = "C:\HPCLMHSTLI_930.XLSX",
z = Text.BetweenDelimiters(x,"\",".")
in
z
M 给了我们很多选择。
我正在寻找 return 当前打开的 Excel 没有目录和扩展名的电子表格文件名的 M 函数。
即如果打开的电子表格位于此处:
C:\HPCLMHSTLI_930.XLSX
我愿意:
HPCLMHSTLI_930
注意:我使用读取设置 Table 的自定义 M 函数实现了此功能,该设置具有两个定义如下的单元格:
=MID(CELL("文件名"),SEARCH("",CELL("文件名"))+1, SEARCH("]",CELL("文件名"))-SEARCH("",CELL("文件名"))-1)
=左(B3,(搜索(".",B3)-1))
所以我不是在寻找这个解决方案。这个解决方案看起来工作量很大,应该有一个更优雅的 M-Language 函数可以 return 当前打开的电子表格文件名。
我不太明白你是如何获得路径的——我猜那是 Cell("fileName"),但通过对 M 代码的一些摆弄,我得出了以下结论:
let
x = "C:\HPCLMHSTLI_930.XLSX",
y=Text.AfterDelimiter(x,"\"),
z=Text.BeforeDelimiter(y,".")
in
z
这似乎可以解决问题。由于文件名中可以包含 1 个以上的句点,这可能太简单了,但如果您的文件名足够简单,这可能会奏效。
但这可以通过以下方式将其包装在一个函数中来改进:
let
ParseFileName = (x) =>
let
y=Text.AfterDelimiter(x,"\"),
z=Text.BeforeDelimiter(y,".")
in z
in
ParseFileName
然后使用类似这样的方式调用它:
let
Source = ParseFileName("C:\HPCLMHSTLI_930.XLSX")
in
Source
我找到了另外两个可能的答案。
第一个比上面那个复杂一点。在这种情况下,我们获取从第一个“\”和最后一个“.”开始的子字符串。
let
x = "C:\HPCLMHSTLI_930.XLSX",
y = Text.PositionOf(x,"\", Occurrence.First),
z = Text.PositionOf(x,".", Occurrence.Last),
a = Text.Middle(x,y+1,z-y-1)
in
a
如果找不到这些字符之一,可能应该有 if 语句。
我找到了一个也适用于更简单情况的最终解决方案。
let
x = "C:\HPCLMHSTLI_930.XLSX",
z = Text.BetweenDelimiters(x,"\",".")
in
z
M 给了我们很多选择。