如果您发布了一些代码,则更容易回答。我假设你的意思是:
我有几个结构相同的 Excel 工作表 工作簿。从每个 excel sheet workbook 我需要两张表。
因为你接着说:
...组合一个文件的两个表,然后对文件夹的所有文件重复此步骤,这样我就得到了所有文件的两个表 ...
以下是我认为您想要实现的目标。
假设我在某个 Excel 工作簿中有两个表格(见下面的蓝色表格和黄色表格),我想将它们合并。
我可以使用如下代码组合我的两个表(前提是我将查询加载到与包含表的 Excel 工作簿不同的 Excel 工作簿中):
let
someExcelFile = Excel.Workbook(File.Contents("C:\someFolder\Book1.xlsx")),
firstTable = someExcelFile{[Name="Table1"]}[Data], // Or however you're getting your first table.
secondTable = someExcelFile{[Name="Table2"]}[Data], // Or however you're getting your second table.
combineTwoTables = Table.Combine({firstTable, secondTable}) // Or however you're combining the two tables.
in
combineTwoTables
(假设您有类似上面的内容。在上面的代码中,我通过名称来识别表,但您可能会以其他方式识别它们。)
然后说我在某个文件夹中还有多个 Excel 工作簿,每个包含两个表(就像上面显示的那样),它们也需要提取/组合。
为了在我文件夹中的每个 Excel 工作簿上使用上述内容,一种方法可能是将其更改为接受任何文件作为参数的函数。比如:
let
CombineTwoTablesInSomeExcelFile = (someFile as binary) as table =>
let
someExcelFile = Excel.Workbook(someFile),
firstTable = someExcelFile{[Name="Table1"]}[Data], // Or however you're getting your first table.
secondTable = someExcelFile{[Name="Table2"]}[Data], // Or however you're getting your second table.
combineTwoTables = Table.Combine({firstTable, secondTable}) // Or however you're combining the two tables.
in combineTwoTables
in
CombineTwoTablesInSomeExcelFile
函数接受二进制类型参数的原因是Folder.Files(在下面用于访问文件夹中的文件)返回一个包含每个文件(在该文件夹中)作为二进制文件的列。换句话说,这很方便,我们可以将该列中的值直接传递给我们的函数(希望有意义)。
要针对文件夹中的所有文件调用该函数并将结果合并到一个表中,我们可以使用如下内容:
let
CombineTwoTablesInSomeExcelFile = (someFile as binary) as table =>
let
someExcelFile = Excel.Workbook(someFile),
firstTable = someExcelFile{[Name="Table1"]}[Data], // Or however you're getting your first table.
secondTable = someExcelFile{[Name="Table2"]}[Data], // Or however you're getting your second table.
combineTwoTables = Table.Combine({firstTable, secondTable}) // Or however you're combining the two tables.
in combineTwoTables,
filesInFolder = Folder.Files("C:\someFolder\"), // Change to whatever the folder is on your computer.
relevantFiles = Table.SelectRows(filesInFolder, each List.Contains({".xlsx"}, [Extension])),
invokedFunction = Table.AddColumn(relevantFiles, "toCombine", each CombineTwoTablesInSomeExcelFile([Content]), type table),
combinedAllTables = Table.Combine(invokedFunction[toCombine])
in
combinedAllTables
结束的几点:
- 我尝试过滤文件夹中的文件以仅包含某些文件扩展名。在您的情况下,您可能需要将文件扩展名添加到列表中。
- 函数内没有实现错误处理。因此,如果您向函数传递一个不是包含两个表的 Excel 文件的文件(或者如果提取两个表所需的步骤与函数中的步骤/逻辑不同),那么您可能会收到错误消息。 (您也不应该在文件夹中包含包含此查询的工作簿。)