我的 Excel 文件中有一些命名范围,需要合并。列名称各不相同,但大多数都有日期和代码。我不能将它们作为 Excel 中的表格,它们需要保留为命名范围,因为我不想冒用 Excel 公式填充列的风险。问题是需要提取标题,因为从技术上讲它是第二行。
无论如何,我已经扩展了表格,但我无法对齐不同表格中的列。下面是我必须解释的地方(逗号是分隔符)
步骤:#“记录器列”:
name, content
Events1, table
Events2, table
Events1 表包含以下数据:
Column1, Column2, Column3, Column4
DATE, FIRST NAME, SURNAME, CODE
1/2/24, John, Smith, 3
Events2 表包含以下数据:
Column1, Column2, Column3
DATE, FULL NAME, CODE
1/3/24, Peter Smith, 2
我想合并两个表。我需要忽略第一行,因为标题是第二行。最终结果需要如下所示。
姓名、日期、名字、姓氏、全名、代码 事件 1、24 年 1 月 2 日、约翰、史密斯、空、空、3 活动 2,24 年 1 月 3 日,空,空,彼得·史密斯,2
实际上还有更多的表,所有标题都保证第 2 行,并且它们将具有日期、代码,但所有其他字段可能会有所不同,顺序也可能不同
这是迄今为止扩展表中所有数据的代码,但我未能弄清楚如何获取标题,然后合并/对齐它们。
let
Source = Excel.CurrentWorkbook(),
#"Merged Queries" = Table.NestedJoin(Source, {"Name"}, Events_List, {"NamedRanges"}, "Events_List", JoinKind.Inner),
#"Removed Columns" = Table.RemoveColumns(#"Merged Queries", {"Events_List"}),
#"Reordered Columns" = Table.ReorderColumns(#"Removed Columns", {"Name", "Content"}),
// Expand the "Content" column to reveal the tables
ExpandContent = Table.ExpandTableColumn(#"Reordered Columns", "Content", Table.ColumnNames(#"Reordered Columns"[Content]{0}))
in
ExpandContent
这提供了:
Name, Column1, Column2, Column3, Column4
Events1, DATE, FIRST NAME, SURNAME, Code
Events1, 1/2/24, John, Smith, 3
Events2, DATE, FULL NAME, CODE
Events2, 1/3/24, Peter Smith, 2
如上所述,我需要去
Name, DATE, FIRST NAME, SURNAME, FULL NAME, CODE
Events1, 1/2/24, John, Smith, null, null, 3
Events2, 1/3/24, null, null, Peter Smith, 2
感谢您的指导。
通过使用高级编辑器将以下代码插入空白查询来创建自定义函数。
将此函数命名为
fnProcess Tables
(t as table)=>
let
Source = Table.PromoteHeaders(Table.RemoveFirstN(t,1), [PromoteAllScalars=true])
in
Source
对于您的主要查询,请将下面的代码粘贴到另一个空白查询中
let
#"Range List" = {"Events1","Events2"},
#"Column Order" = {"DATE","FIRST NAME","SURNAME","FULL NAME","CODE"},
#"Column Types" = { {"DATE", type nullable date},
{"FIRST NAME", type nullable text},
{"SURNAME", type nullable text},
{"FULL NAME",type nullable text},
{"CODE", Int64.Type}},
Source = Excel.CurrentWorkbook(),
Tables = Table.SelectRows(Source, each List.Contains(#"Range List", [Name]))[Content],
#"Process Tables" = List.Accumulate(
{1..List.Count(Tables)-1},
{#"fnProcess Tables"(Tables{0})},
(s,c)=>s & {#"fnProcess Tables"(Tables{c})}),
#"Append" = Table.Combine(#"Process Tables"),
#"Reorder" = Table.ReorderColumns(#"Append", #"Column Order"),
#"Type" = Table.TransformColumnTypes(#"Reorder", #"Column Types")
in
#"Type"
您可能需要进行一些更改以适合您的实际数据集。