用Power query整合100个Excel文件,如何添加一列值等于每个表的特定单元格里的值(例如B5里的项目名称)

有100个excel文件,每个文件有5个结构一样的工作表, 现在整合500个工作表,每个表里 B5是项目名称,如何用power query编辑器里添加一列让其等于各自表里的D5的项目名称呢?

关键

= Excel.Workbook([Content]{0}[Content]){[Name="Sheet1"]}[Item]{[Name="D5"]}[Value]


【以下回答由 GPT 生成】

要实现这个目标,可以按照以下步骤进行操作:

  1. 打开一个新的Excel文件,并打开Power Query编辑器。在菜单栏中选择"数据",然后选择"来自文件",再选择"来自文件夹"。

  2. 在弹出的对话框中,选择包含这100个Excel文件的文件夹,并点击"确定"。

  3. Power Query将会加载这个文件夹中的所有文件。在这个过程中,它会自动推断每个文件的结构。

  4. 在加载完成后,你将看到一个包含所有文件的查询。选择一个工作表,然后在"开始"选项卡中选择"转置表格"。这将把工作表的行转换为列,并将表头放在第一行。

  5. 在转置之后,应用你想要的数据转换操作。在这种情况下,我们要添加一列,使其值等于相应表格的D5单元格中的项目名称。

  6. 选择表头所在的列,然后在"开始"选项卡中选择"填充下一项",再选择"自定义"。

  7. 在弹出的对话框中,输入以下公式:[Table Column]{[Row]}。这个公式将会把每一行的当前表头作为参数,然后返回相应表格中D5单元格的值。

  8. 点击"确定"并关闭Power Query编辑器。你将看到新添加的一列,其值等于每个表格中特定单元格的值。

以下是一个示例代码来演示上述步骤:

let
    // 设置文件路径
    文件夹路径 = "文件夹路径",

    // 加载文件夹中的所有文件
    文件夹 = Folder.Files(文件夹路径),
    源 = Table.FromList(文件夹[Folder Path], Splitter.SplitByNothing(), null, null, ExtraValues.Error),

    // 扩展文件夹列
    扩展文件夹列 = Table.ExpandRecordColumn(源, "Column1", {"Content"}, {"Content"}),

    // 提取Excel文件路径
    #"提取Excel文件路径" = Table.AddColumn(扩展文件夹列, "Excel文件路径", each [Content][Folder Path]&[Content][Name]),

    // 移除不需要的列
    #"移除不需要的列" = Table.SelectColumns(#"提取Excel文件路径", {"Excel文件路径"}),

    // 扩展Excel文件路径列
    扩展Excel文件路径列 = Table.AddColumn(#"移除不需要的列", "Excel内容", each Excel.Workbook(File.Contents([Excel文件路径]))),

    // 打开每个工作簿并转换成表格
    #"打开工作表并转换成表格" = Table.AddColumn(扩展Excel文件路径列, "表格", each Table.Combine(List.Transform([Excel内容][Sheets], each Table.TransformColumnTypes([Data], Table.TransformColumnTypes(_, {{"列名", type text}, {"列名", type any}}))))),

    // 扩展表格列和表名称列
    #"扩展表格列和表名称列" = Table.ExpandTableColumn(#"打开工作表并转换成表格", "表格", List.Combine, {"列名", "列名", "表名称"}, List.Combine),

    // 转置表格
    转置表格 = Table.Transpose(#"扩展表格列和表名称列"),

    // 移除不需要的行
    #"移除不需要的行" = Table.SelectRows(转置表格, each ([行标题] <> null)),

    // 填充下一项
    填充下一项 = Table.FillDown(#"移除不需要的行",{"列名"}),

    // 添加一列
    添加一列 = Table.AddColumn(填充下一项, "项目名称", each [列名]{[行标题]}),

    // 移除行标题列
    #"移除行标题列" = Table.RemoveColumns(添加一列,{"行标题"})
in
    #"移除行标题列"

请注意,上述代码仅为示例,实际操作中你需要根据你的具体情况自行调整和修改。此外,以上操作基于你提供的信息,如果实际情况有所不同,请提供更详细的信息以便给出更准确的解决方案。如果你有任何问题或需要进一步解释,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你这个需求用pandas去做简单得很


要在Power Query编辑器中添加一列,使其等于每个表中特定单元格的值,可以按照以下步骤进行操作:

打开Power Query编辑器,并导入第一个Excel文件。

在Power Query编辑器中,选择要添加列的工作表。

在开始选项卡上,点击"添加自定义列"按钮。

在自定义列对话框中,输入新列的名称(例如"项目名称")。

在自定义列对话框的公式框中输入以下公式:= [#"Table Name"][Column Name]。

将"Table Name"替换为当前工作表的名称,可以在查询设置选项卡找到。
将"Column Name"替换为您想要提取值的单元格的列名和行号(例如"$D$5")。
示例公式:= [#"Sheet1"]["$D$5"]

点击"确定"以添加自定义列。

重复步骤2至步骤6,逐个导入并编辑剩下的Excel文件和工作表。

完成以上步骤后,将为每个工作表添加一个名为"项目名称"的新列,该列的值将等于相应工作表中指定单元格(例如D5)的项目名称。最后,您可以应用和关闭Power Query编辑器,将结果导出或继续进行其他操作

感觉用阿里开源esay exel 做效果更好


要使用Power Query整合100Excel文件,并添加一列值等于每个表的特定单元格中的值,可以按照以下步骤操作:

    打开一个新的Excel工作簿。
    在Excel中,选择"数据"标签,然后点击"获取数据",选择"从文件",再选择"从文件夹"。
    在弹出的对话框中,选择包含这100Excel文件的文件夹,并点击"确定"Power Query编辑器将会打开,显示文件夹中的文件列表。
    在Power Query编辑器中,选择"添加自定义列"。
    在公式框中输入以下公式,其中"Source"是指对应的列名(例如B5),你可以根据你的实际情况进行修改:
    = Excel.Workbook([Content]){[Item="SheetName",Kind="Sheet"]}[Data][Source]{0}
    这个公式将会从每个表的特定单元格中获取值。
    注意:请将"SheetName"替换为你所需的工作表名称,将"Source"替换为你所需的单元格引用。
    点击"确定",新的列将会添加到你的数据表中,其中的值等于每个表的特定单元格中的值。

通过以上步骤,你可以使用Power Query整合100Excel文件,并添加一列值等于每个表的特定单元格中的值。最后,你可以将结果导出为一个新的Excel文件或进行进一步的数据处理。

参考gpt:
结合自己分析给你如下建议:
1.在 Excel 中,选择“数据”选项卡,然后选择“从文件夹”获取数据。
2.选择包含你的 100 个 Excel 文件的文件夹,然后点击“确定”。
3.在弹出的对话框中,点击“转换数据”,进入 Power Query 编辑器。
4.在查询编辑器中,选中“内容”列,删除其他列。
5.新建一个自定义列,输入公式 =Excel.Workbook([Content],true) ,这样可以将二进制数据转换为 Excel 工作簿对象。
6.展开自定义列,选择“名称”和“数据”两列,删除其他列。
7.在“名称”列中,筛选出你需要合并的五个工作表的名称。
8.展开“数据”列,选择所有列,删除其他列。
9.新建一个自定义列,输入公式 =[Data]{0}[D5] ,这样可以获取每个工作表中 D5 单元格的值,即项目名称。
10.将新建的自定义列重命名为“项目名称”,并将其移动到第一列的位置。
11.点击“关闭并加载”,将合并后的数据加载到 Excel 中。


Power Query 系列 (12) - Power Query 结构化列应用案例_power query应用案例_stone0823的博客-CSDN博客 本篇数据处理来自一个实际处理数据的简化。下图中,假设左边是一个直观的 BOM 结构展示,在 Excel 中,输出存储格式为中间的样式:第一列为物料编码的级别,第二列为物料编码。需要在 Excel 中输出物料编码上一级的物料编码。Excel 处理这种没有明显规律的数据,借助 VBA 比较方便。我的方法是这样的:从第二行开始循环,如果 Level = 1,初始化一个数组 BomMaterials,..._power query应用案例 https://blog.csdn.net/stone0823/article/details/100713068

Power Query M 公式语言引用 - PowerQuery M | Microsoft Learn Power Query M 用于对一个或多个受支持的数据源中的数据进行筛选、合并和混合。 https://learn.microsoft.com/zh-cn/powerquery-m/

该回答引用于chatGPT仅供参考:

要使用Power Query编辑器为整合的工作表添加一列,其中每个表的值等于各自表格中的项目名称(D5单元格),可以按照以下步骤进行操作:

1. 打开一个新的Excel文件,然后选择"数据"选项卡上的"从文件",然后选择"从文件夹"2. 在打开的对话框中,选择包含您的100Excel文件的文件夹,并点击"获取数据"3. 在导航窗格中,展开"工作表"文件夹,并选择要整合的工作表所在的文件夹。选择第一个工作表,然后点击"编辑"按钮。

现在您将进入Power Query编辑器。

4. 确保只有第一个工作表处于活动状态。在"主页"选项卡上,选择"添加列",然后选择"自定义列"5. 在打开的对话框中,输入以下公式来创建新的列:

   
   = Excel.Workbook(File.Contents([Folder Path]), null, true){[Item= [ItemName],Kind="Sheet"]}[Data]{0}[Column1]


   这个公式将使用Folder Path参数中文件夹路径的值,找到指定的工作表(根据ItemName的值)。这样就可以获取每个表的D5单元格的值。

6. 输入列名(例如,"项目名称")并点击"确定"。

现在,您已经将一个新的列添加到第一个工作表。为了将这个更改应用到其他工作表,可以使用Power Query的复制功能。

7."主页"选项卡上,选择"全部加载",然后关闭Power Query编辑器。

此时,Power Query将会自动整合100Excel文件,并在每个工作表的后面添加一个新列,该列的值等于各自工作表中的D5单元格的值(即项目名称)。

请注意,如果您的工作表和列名略有不同,请根据实际情况进行相应的调整。