[分享] 不用VBA,不用SQL语句,且看 POWER QUERY 快速合并多个Excel工...

  [复制链接]
play_girl1 | 2021-2-19 05:13:51 | 显示全部楼层
试了一下,果然可行,不用VBA代码和sql语句就能实现多文件夹多工作簿多工作表的汇总,实在是太牛了!!学习
回复

使用道具 举报

九谷子 | 2021-2-19 05:14:52 | 显示全部楼层
let
  源 = Folder.Files("C:\Users\Administrator\Desktop\新建文件夹"),
  合并的二进制 = Binary.Combine(源[Content]),
  #"导入的 Excel" = Excel.Workbook(合并的二进制)  
in
  #"导入的 Excel"

#"导入的 Excel" = Excel.Workbook(合并的二进制) 这个步骤的时候报错了,错误为“DataFormat.Error: 无法将输入识别为有效的 Excel 文档。详细信息:
  Binary”不知道什么原因,请问怎么解决这个问题呀
回复

使用道具 举报

虫子 | 2021-2-19 05:19:52 | 显示全部楼层
let
  源 = Folder.Files("C:\Users\Administrator\Desktop\新建文件夹"),
  合并的二进制 = Binary. ...


这个问题我也遇到了,我采用 比较笨的方法,把原数据的表复制粘贴到另一个新表,后来就成功了,现在也不知道是什么原因。
回复

使用道具 举报

原始宝宝 | 2021-2-19 05:27:52 | 显示全部楼层
楼主,我试了多次,在你的第3步“3、可以看到父文件夹下所有工作簿信息都已经列示出来,我们单击第一列标题左边扩展按钮,”这个地方,点Content右边的扩展按钮是出不来的,会提示如下信息:
  1. DataFormat.Error: 外部表不是预期的格式。

  2. 详细信息:

  3.   97386d52-9f57-42b2-bbf1-dc825b53a653.XLS
复制代码
不知道是不是我们的query版本不一样,我现在用的是最新版本的

我想这个地方出不来是因为下面有多个xlsx文件,试着把其他三个筛选掉只保留一个就可以了,代码可以这样写:
  1. let

  2.   源 = Folder.Files("C:\Users\Administrator\Desktop\power query学习\父文件夹"),

  3.   筛选的行 = Table.SelectRows(源, each ([Name] = "车间1.xlsx")),

  4.   合并的二进制 = Binary.Combine(筛选的行[Content]),

  5.   #"导入的 Excel" = Excel.Workbook(合并的二进制)

  6. in

  7.   #"导入的 Excel"
复制代码
试验成功

我看到你的查询1代码是类似这样的:
  1. let

  2.   源 = Folder.Files("C:\Users\Administrator\Desktop\power query学习\父文件夹"),

  3.   合并的二进制 = Binary.Combine(源[Content]),

  4.   #"导入的 Excel" = Excel.Workbook(合并的二进制)

  5. in

  6.   #"导入的 Excel"
复制代码
我试了试还是不行,就是上面说的那个原因,除非把代码改为:
  1. let

  2.   源 = Folder.Files("C:\Users\Administrator\Desktop\power query学习\父文件夹"),

  3.   合并的二进制 = 源{[#"Folder Path"="C:\Users\Administrator\Desktop\power query学习\父文件夹",Name="车间1.xlsx"]}[Content],

  4.   #"导入的 Excel" = Excel.Workbook(合并的二进制)

  5. in

  6.   #"导入的 Excel"
复制代码
也就是说,还是需要指定"车间1.xlsx"这个文件

主要是我不理解Binary.Combine这个函数是什么意思,对于多个xlsx文件来说,我觉得这个函数可能是没法用的吧。

另外在第3步的时候,在Content列上点右键点“深化”,然后在List里点某个文件的Binary也行,这样代码就成了:
  1. let

  2.   源 = Folder.Files("C:\Users\Administrator\Desktop\power query学习\父文件夹"),

  3.   Content = 源[Content],

  4.   Content1 = Content{0},

  5.   #"导入的 Excel" = Excel.Workbook(Content1)

  6. in

  7.   #"导入的 Excel"
复制代码
其实仔细看,它还是指定了某个xlsx文件,所以我觉得,对于多个xlsx文件来说,直接点Content右边的扩展是不行的
回复

使用道具 举报

ewayfree | 2021-2-19 05:32:52 | 显示全部楼层
楼主,我试了多次,在你的第3步“3、可以看到父文件夹下所有工作簿信息都已经列示出来,我们单击第一列标题 ...


是的,我当时录图片的时候,没有仔细验证最后的结果。
需要同时指定路径和工作簿名,需要两个参数。
回复

使用道具 举报

cdefabg | 2021-2-19 05:35:53 | 显示全部楼层
又试了试,如果只是需要提取文件夹下所有工作薄里的所有数据的话,可以自定义列加入公式来解决,添加自定义列Custom,输入公式Excel.Workbook([Content]),可以看到这里的Custom全部都是Table,这里的Table指的是每个工作薄,一共有四个,每个里面包括Name,Data,Item,Kind,Hidden这几列,每一行是每张工作表,展开Data列,得到每张Table,这里的Table就是每个工作表了,一共有20个Table也就是20张工作表,每个Table有两列,Column1和Column2,每列里就是具体内容了,展开这两列,就得到了父级文件夹下所有工作薄里的所有工作表里的所有数据了,然后筛选去掉“名称”、“数量”这些字段名称的行就等到了想要的结果,最终代码是:
  1. let

  2.   源 = Folder.Files("C:\Users\Administrator\Desktop\power query学习\父文件夹"),

  3.   已添加自定义 = Table.AddColumn(源, "Custom", each Excel.Workbook([Content])),

  4.   #"展开的“Custom”" = Table.ExpandTableColumn(已添加自定义, "Custom", {"Data"}, {"Data"}),

  5.   #"展开的“Data”" = Table.ExpandTableColumn(#"展开的“Custom”", "Data", {"Column1", "Column2"}, {"Column1", "Column2"})

  6. in

  7.   #"展开的“Data”"
复制代码
回复

使用道具 举报

nomad2 | 2021-2-19 05:43:53 | 显示全部楼层
如果是合并某特定文件夹(不含子文件夹)下的几个工作簿,具体需要怎么操作?
和楼主介绍的特定文件夹(含子文件夹)感觉很不一样,自己也没有代码基础,求指教
回复

使用道具 举报

lusheep | 2021-2-19 05:47:53 | 显示全部楼层
在第三步的时候出现:“DataFormat.Error: 无法将输入识别为有效的 Excel 文档”提示是什么情况呀


请问是怎么解决的啊?我也出现了这个问题
回复

使用道具 举报

亿云 | 2021-2-19 05:52:53 | 显示全部楼层
谢谢分享,学习了。
回复

使用道具 举报

september | 2021-2-19 05:58:54 | 显示全部楼层
没有看太明白,假如将整个文件夹更换了位置,是否每次都需要把路径名称更改?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则