在具有自动过滤器的excel工作簿上使用电源查询从错误的列中提取数据

时间:2017-08-16 21:29:01

标签: excel powerquery

我的目标是使用电源查询来合并来自多个excel工作簿的数据。我开始使用本教程:https://www.myexcelonline.com/blog/consolidate-multiple-excel-workbooks-using-power-query/和我自己的工作簿。我使用的是Excel 2010,我的工作簿在某些列上启用了过滤功能。第一个工作簿是在2009年创建的.xls文件,其余的都是从它的副本分支出来的。之后它们被重新保存为.xlsx文件。

如果单击“Import.Data.Column5”上的箭头,我导入所有以一个工作簿开头的列(步骤9)后,在过滤器列表中,我最初看到所有预期值,“List may”不完整的“警告。单击“加载更多”后,过滤器列表现在显示第6列(F)中预期的列5(E)数据和数据值。

我查看了原始的excel工作簿。列E中不存在这些值。如果我使用“查找”功能,它们只显示在F中。但由于某种原因,Power Query将它们拉入错误的列。此外,这不仅仅是第5列的问题,它发生在工作簿中已启用过滤的每一列。即使我删除过滤器并清除所有数据,格式化,条件格式,冻结窗格,合并单元格等,以前过滤的单元格仍然存在问题。

请参阅此链接以及图片以帮助解释:

enter image description here

图像的上半部分显示excel文件,底部显示电源查询中的过滤器下拉列表。此时文件夹中只有这一个工作簿。注意第6栏(F)中的“Rev”,“01”和“02”如何被拉入第5栏(E),但过滤器上方的“03”没有。

我尝试在空白工作簿中创建过滤器并在其上使用powerquery但我无法复制此问题(虽然我遇到了一个不同的问题,其中过滤器标题出现两次)。

有什么想法吗?

编辑:如果我尝试创建查询“从文件”而不是“从文件夹”,一切正常。因此,“From Folder”和“= Excel.Workbook([Content])”的工作方式有所不同,导致了这个问题。

1 个答案:

答案 0 :(得分:0)

您对本教程的步骤感到困惑。您可以使用Power Query过滤数据源。您不会将过滤器应用于数据源,然后将其拉入Power Query。它会忽略自动过滤器。如果需要,可以在Power Query中完成过滤。

本教程是将几个Excel文件从文件夹中提取到Power Query中,然后使用步骤访问"数据"每个Excel工作簿的属性,然后展开"数据"到底层工作簿的列。它们都有5列。

从屏幕截图中可以清楚地看到,Power查询会从表A开始拉取表单中的所有列,并使用第1行作为第一行数据。您可以看到在F列中,第11行的值为03,F13的值为Rev,后两行的值为0102。您可以在Power Query编辑器中看到Import.Data.Column6中与F列对应的前十行有null,然后是电子表格中显示的数据,即{{1} },然后为null,然后是03Rev01

您需要了解,如果您在工作表中没有可识别的表格,那么Power Query将假设数据在A1中开始。你没有桌面对象,只是在某处有自动过滤器的行。因此,Power Query开始将电子表格拼接成列。

  • A列全部为空,因此Import.Data.column1将全部为空。
  • 列B在B13中有第一个条目,因此Import.Data.column2将显示12行null,后跟B12到B15中的三个值

等等。

如果您的所有电子表格都是这样构建的,则需要过滤掉所有Null值,以便只保留您的实际数据。

过滤Import.Data.Column2(您的B列)并取消空值。这应该会让你的源行13的标题值现在位于数据的顶部。删除列Imort.Data.Column4,因为它没有数据。将第一行提升为标题,因此现在调用的列与数据源中的列相同。

如果您从具有相同结构的多个工作簿中获得相同的数据,则需要过滤"请求的"查询编辑器中的列并取消标记值"请求",以便删除其他表的标题。

这有意义吗?