如何在Power BI中动态提取多URL对应PDF文件的多表格数据?
动态提取多URL中PDF的所有表格(Power Query M)
问题背景
现有Power Query M代码仅能固定提取单个PDF指定页面的表格,无法适配多个PDF URL、每个PDF内表格数量/页面不固定的场景,需要改为动态获取所有表格并整合。
原始代码:
let Source = Pdf.Tables(Web.Contents("https://ifbb.com/wp-content/uploads/2023/01/07-2023-Jordan-Amat-Results.pdf"), [Implementation="1.3"]), Page1 = Source{[Id="Page002"]}[Data], #"Changed Type" = Table.TransformColumnTypes(Page1,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}, {"Column11", type text}}) in #"Changed Type"
解决方案代码
以下代码会遍历指定的URL列表,自动提取每个PDF内的所有表格,并合并为一个统一的表:
let // 1. 定义要处理的PDF URL列表,可替换为从Excel/CSV导入的URL表 PDF_URL_List = { "https://ifbb.com/wp-content/uploads/2023/01/07-2023-Jordan-Amat-Results.pdf", "添加其他PDF URL到这里" }, // 2. 遍历每个URL,提取该PDF的所有表格 Extract_All_Tables = List.Transform(PDF_URL_List, (url) => let Source = Pdf.Tables(Web.Contents(url), [Implementation="1.3"]), // 获取PDF内所有表格(不再指定单个Page) All_Tables = Table.FromRecords(Source), // 提取每个表格的Data列,转换为表的列表 Table_List = All_Tables[Data], // 合并当前PDF内的所有表格 Combined_PDF_Tables = Table.Combine(Table_List), // 添加来源URL列,方便追溯数据来源 Add_Source_URL = Table.AddColumn(Combined_PDF_Tables, "Source PDF URL", each url) in Add_Source_URL ), // 3. 合并所有PDF提取到的表格 All_Combined_Tables = Table.Combine(Extract_All_Tables), // 4. 自动检测并转换列类型(替代手动指定列类型) Auto_Change_Type = Table.AutoDetectColumnTypes(All_Combined_Tables, null) in Auto_Change_Type
关键改动说明
- 动态获取所有表格:用
Table.FromRecords(Source)获取PDF内的所有表格记录,再提取Data列得到所有表格的列表,避免固定指定Page002。 - 多URL遍历:通过
List.Transform遍历URL列表,批量处理每个PDF。 - 自动类型转换:用
Table.AutoDetectColumnTypes替代手动指定列类型,适配不同表格的列结构差异。 - 来源追溯:添加
Source PDF URL列,方便后续查看数据来自哪个PDF。
扩展说明
如果你的URL存储在Excel或CSV文件中,可替换PDF_URL_List部分为:
// 从Excel导入URL列表(示例路径,需替换为实际路径) URL_Source = Excel.Workbook(File.Contents("C:\你的URL列表文件.xlsx"), null, true), URL_Table = URL_Source{[Item="Sheet1"]}[Data], PDF_URL_List = URL_Table[URL列名]
内容的提问来源于stack exchange,提问作者Sat
相关产品推荐
相关产品推荐

