如何使用相对path指向要将数据导入到我的数据模型的文件?
我真的想要达到什么
我们有一个Excel仪表板,它与我们的内部应用程序导出一起使用。 数据Excel文件的生成是用EPPlus完成的,我们相信我们可以使用Excel仪表板作为生成的“基本”文件,这样导出的文件将仪表板包含在一个工作表中,并将数据集包含在另一个工作表中。
所以用户可以在一个文件中获得他们所需要的一切。
我们有这样的感谢命名的范围, dynamic适应数据集的大小,这里覆盖
但是,我们发现,由于Excel仪表板文件中的DataModel是OLAP多维数据集,因此我们无法更新基础数据集并使用EPPlus进行保存,并在尝试使用“caching源不是工作表”时收到错误保存表格。
所以当我们做这件事的时候,我们find了一个临时的解决scheme,我们也遇到了一些麻烦。
新的问题
我们想到的临时解决scheme是将Excel仪表板和数据分配为两个单独的Excel文件。 仪表板分发给需要它的人,然后可以从我们的应用程序生成数据导出。
我们认为唯一的缺点是需要用户手动重命名数据文件并将其与Excel仪表板放在一起。
但是,我们遇到了Excel坚持使用数据文件的绝对path而不是相对path的问题。
这导致要求用户手动将源指向数据导出。 这显然是这样做的:
现在,我正在展示整个过程,并对我们设置的方式进行了一些了解,因为我不确定我是否正确地使用了有关技术细节的信息 – 也许我大错特错了该方法。
总的来说,它的工作方式
File A
包含仪表板,一些带有仪表板使用的数据透视表的表单。 数据透视表都是在前面提到的数据模型中使用的,它是一个Cube(我们需要它是我们在数据透视表中使用的一些函数的一个立方体)。 数据模型基于命名范围,包括工作表中的所有数据。
File B
是由我们的应用程序生成的。 在devise仪表板和映射数据时,两个文件并排放置,因为我曾经试图在可能的情况下保留相对文件path。 该文件由包含导出数据的单个工作表组成。
在这一点上,挑战是自动将File B
中的数据拉入File A
的工作表。 我这样做是通过转到数据选项卡并使用Get Data
function将其指向File B
并告诉Excel加载指定工作表中的数据。
尽pipe“解决scheme”看起来过于复杂,但它起到了魅力的作用。 一切都很好,直到我们试图从另一台机器/目录使用表。 然后,我们发现File B
的path似乎是绝对的,并且数据文件不能再被find。
因此,这个冗长的解释之后的简短问题是:“ 如何使用”获取数据“function从外部文件导入数据时,Excel可能使用相对path指向另一个文件?
通过熟悉Power Query,我已经能够想出一个解决scheme。
我的设置仍然如上所述。
首先,我在工作簿中使用了一些具有“系统”值的工作表。 我用下面的Excel公式添加了一个字段:
=LEFT(CELL("filename");FIND("[";CELL("filename");1)-1)
这为我提供了File A
所在文件夹的绝对path。 我使用这个值,并连接保存数据的File B
的预期文件名。 结果是绝对path,指向我期望数据文件的位置。
然后我添加了一个名字范围,指向包含这个值的确切单元格。
接下来,我添加了一个新的Power Queryfunction,如下所示:
= (rangeName) => Excel.CurrentWorkbook(){[Name=rangeName]}[Content]{0}[Column1]
该函数将命名范围的名称作为参数,并将该值返回。 我的情况我叫GetValue
函数。 现在可以在其他Power Query脚本中使用此function。
最后,我加载了Power Query脚本,这个脚本负责从其他Excel工作表中加载数据。 在那个脚本中,我改变了文件的path:
Source = Excel.Workbook(File.Contents(GetValue("FilePath")), null, true),
在这里需要注意的一点是GetValue("FilePath")
对File.Contents
的path参数的File.Contents
。 FilePath
是我给范围指向单元格的名称。 它所做的就是从我的工作表加载path,并将其用作保存数据的Excel工作表的path。
一个相当复杂的解决scheme,但它的工作原理。