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 给了我们很多选择。