代码之家  ›  专栏  ›  技术社区  ›  Christian A. Rasmussen

如何使用相对路径指向要从中将数据导入数据模型的文件?

  •  1
  • Christian A. Rasmussen  · 技术社区  · 7 年前

    我真正想要实现的

    我们有一个Excel仪表板,该仪表板可以与内部应用程序的导出一起使用。数据Excel文件的生成是使用ePlus完成的,我们确信可以使用Excel仪表板作为生成的“基础”文件,因此导出的文件在一个工作表中包含仪表板,在另一个工作表中包含数据集。

    因此,用户将在一个文件中收到所需的一切。

    多亏了命名范围 dynamically adapt to the size of the dataset, covered here

    然而,我们发现,由于Excel仪表板文件中的数据模型是OLAP多维数据集,因此我们无法更新基础数据集并使用ePlus保存它,并且在尝试保存工作表时收到关于“缓存源不是工作表”的错误。

    因此,在我们努力的过程中,我们找到了一个临时解决方案。。。我们也遇到了一个障碍。

    我们想到的临时解决方案是将Excel仪表板和数据作为两个单独的Excel文件分发。仪表板被分发给需要它的人,然后可以从我们的应用程序生成数据导出。

    然而,我们遇到了一个问题,Excel坚持使用数据文件的绝对路径,而不是相对路径。

    这导致需要用户手动将源指向数据导出。这显然是这样做的: Method of updating the path to the external Excel data file

    现在,我展示了整个过程,以便对我们设置它的方式有一些了解,因为我不确定我在技术细节方面是否使用了正确的措辞——也许我在方法上大错特错了。

    总的来说,它的工作方式

    File A 包含仪表板,一些带有仪表板使用的数据透视表的工作表。数据透视表都是基于表中前面提到的数据模型的,该数据模型是一个立方体(对于我们在数据透视表中使用的一些函数,我们需要它是一个立方体)。数据模型基于一个命名范围,其中包括一个工作表中的所有数据。

    File B 是由我们的应用程序生成的。在设计仪表板和映射数据时,这两个文件并排放置,因为我的印象是Excel试图尽可能保留相对的文件路径。该文件由包含导出数据的单个工作表组成。

    在这一点上,挑战是自动从 文件B 进入工作表中 文件A . 我通过转到“数据”选项卡并使用 Get Data 指向的函数 并告诉Excel从指定的表中加载数据。

    尽管“解决方案”似乎过于复杂,但这确实很有魅力。 文件B 似乎是绝对的,无法再找到数据文件。

    因此,在这个冗长的解释之后,一个简短的问题是:“ "

    1 回复  |  直到 7 年前
        1
  •  3
  •   Christian A. Rasmussen    7 年前

    通过更加熟悉Power Query,我已经能够想出一个解决方案。

    我的设置仍如上所述。

    首先,我有一张带有一些“系统”值的表,我在工作簿中的不同位置使用这些值。我在那里用以下Excel公式添加了一个字段:

    =LEFT(CELL("filename");FIND("[";CELL("filename");1)-1)
    

    这为我提供了文件夹的绝对路径 File A 驻留。 File B 其中包含数据。结果是一条绝对路径,指向 我希望

    然后,我添加了一个名称范围,指向包含该值的确切单元格。

    接下来,我添加了一个新的功率查询函数,如下所示:

    = (rangeName) => Excel.CurrentWorkbook(){[Name=rangeName]}[Content]{0}[Column1]
    

    该函数将命名范围的名称作为参数,并返回值。我在我的案例中调用了函数 GetValue . 此函数现在可以在其他Power Query脚本中使用。

    最后,我加载了Power Query脚本,该脚本负责从另一张Excel表加载数据。在该脚本中,我将文件路径更改为:

    Source = Excel.Workbook(File.Contents(GetValue("FilePath")), null, true),
    

    这里需要注意的是 GetValue("FilePath") 对于路径参数 File.Contents . FilePath 是我给出的指向单元格的范围的名称。它所做的只是从我的工作表中加载路径,并将其用作保存数据的Excel工作表的路径。

    这是一个相当复杂的解决方案,但它有效。