【办公自动化】使用Python一键提取PDF中的表格到Excel( 三 )


当发现当页有表格后 , 新建一个Excel表 , 以“Sheet”加上此时PDF的页码(比如“”)命名 。在写入数据时 , 先用一个`for`循环获得单个表格的数据 , 再用第二个`for`循环获得表格中一行的数据 , 然后写入Excel表 。最后保存数据 。由于表格太多 , 程序运行时间较长 , 大约需要3分钟 。
import pdfplumberfrom openpyxl import Workbookwith pdfplumber.open("保利地产年报.pdf") as p:wb = Workbook() #新建excel工作簿wb.remove(wb.worksheets[0])#删除工作簿自带的工作表for index,page in enumerate(p.pages,start = 1): #从1开始给所有页编号tables = page.extract_tables() #读取表格if tables: #判断是否存在表格 , 若不存在 , 则不执行下面的语句ws = wb.create_sheet(f"Sheet{index}") #新建工作表 , 表名的编号与表在PDF中的页码一致for table in tables: #遍历所有列表for row in table: #遍历列表中的所有子列表 , 里面保存着行数据ws.append(row) #写入excel表wb.save("保利地产年报表格.xlsx")
数百个表格就这样潇洒地复制到Excel表格中了 。
如果想要指定某个表格 , 在提取数据的时候指定页码即可 。但如果想批量导出大量不同公司的年报的指定表格 , 则需要使用关键词定位了 。还好 , 无论深圳市场还是上海市场 , 公司的年报中的标题基本都是唯一的 , 这给我们用标题做关键词提供了方便 。假设我们需要提取公司“主要会计数据”下面的表格 , 则用关键词“主要会计数据”定位即可 。如下以此为例进行操作 。
import osimport pdfplumberfrom openpyxl import Workbookpath='PDF'#文件所在文件夹files = [path+"\\"+i for i in os.listdir(path)] #获取文件夹下的文件名,并拼接完整路径key_words = "主要会计数据"for file in files:with pdfplumber.open(file) as p:wb = Workbook() #新建excel工作簿wb.remove(wb.worksheets[0])#删除工作簿自带的工作表#获取关键词所在页及下一页的页码pages_wanted = []for index,page in enumerate(p.pages): #从0开始给所有页编号if key_words in page.extract_text():pages_wanted.append(index)pages_wanted.append(index+1)break#提取指定页码里的表格for i in pages_wanted:page = p.pages[i]tables = page.extract_tables() #读取表格if tables: #判断是否存在表格 , 若不存在 , 则不执行下面的语句ws = wb.create_sheet(f"Sheet{i+1}") #新建工作表 , 表名的编号与表在PDF中的页码一致for table in tables: #遍历所有列表for row in table: #遍历列表中的所有子列表 , 里面保存着行数据ws.append(row) #写入excel表wb.save("Excel\\{}.xlsx".format(file.split("\\")[1].split(".")[0]))
以上 , 增加了一段获取关键词所在页码及下一页的页码的程序 。之所以要获取关键词下一页页码 , 是因为有些表格会跨页 , 为了不遗漏数据 , 宁愿多获取一点 。一旦找到关键词所在页 , 马上用`break`停止`for`循环 。后面再遍历``里面储存的页码 , 提取表格并写入Excel文件 , 并保存即可 。批量获取的指定内容保存在`Excel`文件夹下 。
三、往期推荐
提取pdf中的表格数据(附实战案例)

【办公自动化】使用Python一键提取PDF中的表格到Excel

文章插图
使用自动发送邮件
操作ppt和pdf基础
操作word基础
操作excel基础
文末推荐?
AI时代Excel数据分析提升之道:知识精进+学习答疑+上机实训+综合实战+应用 , 零基础入门 , 极速提升数据分析效率!