Excel Power Query提取PDF部分表格异常,求代码修改方案
Power Query提取PDF表格问题修正需求
现有Power Query代码可正常提取PDF中的指定表格,但新增的PDF文件(第3页的Table 4和Table 5)格式与原有文件一致,提取结果却出现错误——正确结果对应Excel工作表的绿色区域,错误结果为红色区域。已调整代码适配原有文件,但新增的这两个表格无法正确提取,现需修改代码,使其能正确提取该PDF第3页的Table 4和Table 5,得到绿色区域所示的正确结果。
现有代码
let group= (filename)=> //open each file and pull out all the tables let Source = Pdf.Tables(File.Contents(filename), [Implementation="1.3"]), List = List.Union(List.Transform(Source[Data], each Table.ColumnNames(_))), #"Expanded Data" = Table.ExpandTableColumn(Source, "Data", List,List), #"Filtered Rows" = Table.SelectRows(#"Expanded Data", each Text.StartsWith([Name], "Table")), #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Name"}, {{"data", each _, type table}}), #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each split([data])) in #"Added Custom", //process each table split= (variable)=> let #"Filtered Rows1" = Table.SelectRows(variable, each ([Column1] <> "" and [Column1]<>null and not Text.Contains([Column1], "Final") and [Column2] <> "" and [Column2]<>null)), #"Promoted Headers" = Table.PromoteHeaders(#"Filtered Rows1", [PromoteAllScalars=true]), #"Removed Columns" = Table.RemoveColumns(#"Promoted Headers",List.FirstN(Table.ColumnNames(#"Promoted Headers"),3)), Names=List.RemoveNulls(List.Transform(Table.ColumnNames(#"Removed Columns"), each if Text.Contains(_,"Volume") or Text.Contains(_,"Unit") then _ else null)), #"Removed Other Columns" = Table.SelectColumns(#"Removed Columns",Names), FirstName=List.First(Table.ColumnNames(#"Removed Other Columns")), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Removed Other Columns",{FirstName} , "Attribute", "Value"), #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Other Columns",{{FirstName, "Category"}}), Transform = Table.TransformColumns(#"Renamed Columns",{{"Attribute",each Text.BeforeDelimiter(_,"_"), type text}}), //Dates RepeatCount=Table.RowCount(#"Removed Columns"), Dates = Record.ToList(variable{1}), b = List.RemoveNulls(List.Transform(Dates, each try if Text.Contains (_,"(") and not Text.Contains (_,"Table") then Text.BeforeDelimiter(_, "(") else null otherwise null)), a={List.Repeat(b,RepeatCount + 2)}, //Distance #"Promoted Headers5" = Table.PromoteHeaders(variable, [PromoteAllScalars=true]), Distance = List.Repeat(List.RemoveNulls(List.Transform(Table.ColumnNames(#"Promoted Headers5"), each try if Text.Contains(_,"Distance") then Number.From(Text.Select(_,{"0".."9"})) else null otherwise null)),List.Count(Names)-1),DistanceTable= Table.FromList(Distance, Splitter.SplitByNothing(), {"Value"}, null, ExtraValues.Error), #"Added Custom3" = Table.AddColumn(DistanceTable, "Category", each "Depth_MD"), //Total #"Filtered Rows5" = Table.SelectRows(variable, each (Text.Contains([Column1],"Final"))){0}, r=Record.ToList(#"Filtered Rows5"), s=if List.PositionOf(r,"Final") = -1 then List.PositionOf(r,"Pre-flow Final") else List.PositionOf(r,"Final"), rr=List.Transform(r, each if _="" then null else _), t=List.RemoveNulls(List.RemoveFirstN(rr,s+1)), TotalTable= Table.FromList(t, Splitter.SplitByNothing(), {"Value"}, null, ExtraValues.Error), #"Added Custom4" = Table.AddColumn(TotalTable, "Category", each "Final"), //combine it all h = Table.FromColumns(Table.ToColumns(Transform&"Added Custom3"& #"Added Custom4")&a), #"Removed Columns1" = Table.RemoveColumns(h,{"Column2"}), #"Changed Type" = Table.TransformColumnTypes(#"Removed Columns1",{{"Column1", type text}, {"Column3", type number}, {"Column4", type text}}), #"Pivoted Column" = Table.Pivot(#"Changed Type", List.Distinct(#"Changed Type"[Column1]), "Column1", "Column3", List.Sum) in #"Pivoted Column", Source2 = Folder.Files("c:\temp5"), #"Filtered Rows" = Table.SelectRows(Source2, each ([Extension] = ".pdf")), #"Added Custom" = Table.AddColumn(#"Filtered Rows", "Data", each group([Folder Path]&[Name])), #"Renamed Columns" = Table.RenameColumns(#"Added Custom",{{"Name", "zName"}}), #"Expanded Data" = Table.ExpandTableColumn(#"Renamed Columns", "Data",{"Name","Custom"},{"Name","Custom"}), #"Removed Errors" = Table.RemoveRowsWithErrors(#"Expanded Data", {"Custom"}), List = List.Union(List.Transform(#"Removed Errors"[Custom], each Table.ColumnNames(_))), #"Expanded Data2" = Table.ExpandTableColumn(#"Removed Errors", "Custom", List,List), #"Changed Type" = Table.TransformColumnTypes(#"Expanded Data2",{{"Column4", type text}}), #"Filtered Rows1" = Table.SelectRows(#"Changed Type", each ([Column4] <> "Combined ")), #"Changed Type1" = Table.TransformColumnTypes(#"Filtered Rows1",{{"Column4", type date}}), #"Renamed Columns1" = Table.RenameColumns(#"Changed Type1",{{"Column4", "Dates in Report"}}), #"Filtered Rows2" = Table.SelectRows(#"Renamed Columns1", each ([Dates in Report] <> null)) in #"Filtered Rows2"
内容的提问来源于stack exchange,提问作者chi005
相关产品推荐
相关产品推荐

