首页 > 其他分享 >提取PDF文档中的表格转换成Excel表格【一】

提取PDF文档中的表格转换成Excel表格【一】

时间:2024-10-26 23:16:03浏览次数:3  
标签:表格 url Excel biao 文档 PDF


前言

有一个朋友是做跨境电子商务的,开了几个商务网店,每天早上上班的时候,都要求员工从各个商店下载大量商品记录,并进行汇总分析,但下载的都是包含表格的PDF格式,只能手工摘录PDF表格数据保存到一个Excel,这样做费时费力又容易出错,所以精心了个小程序,可以批量提取PDF文档的表格汇总成Excel表格,便于统计、分析。

一、准备工作

1、安装相关库文件

# 需要以下三个库
pip install pdfplumber
pip install openpyxl
pip install pandas

2、事先准备一个包含类似以下格式表格的PDF文档,并保存在相应目录中,测试用的PDF文档下载:测试用的PDF文档 该示例文档只包含了两个格式相同的表格。

二、设计步骤

1.引入库

import pdfplumber,openpyxl,os
import pandas as pd
import numpy as np
from openpyxl.styles import Alignment,Color,Border,Side # 导入字体和颜色模块,填充模块
from openpyxl.utils import get_column_letter

2.设计思路

   (1)预设单元格居中及边框线条粗细,备用。

alig_center = Alignment(horizontal='center', vertical='center')  # 居中
border = Border(                                                 # 设置表格的边框
    left=Side(border_style='thin', color=Color(rgb='00000000')),
    right=Side(border_style='thin', color=Color(rgb='00000000')),
    top=Side(border_style='thin', color=Color(rgb='00000000')),
    bottom=Side(border_style='thin', color=Color(rgb='00000000')))

(2) 读取PDF文档中的所有表格数据,返回一个列表。

def open_pdf_1(url,biao_tou):
    tab_lis,biao_i=[],[]
    with pdfplumber.open(url) as pdf:
        page=pdf.pages
        for pa in page:
            pag=pa.extract_tables()
            for p in pag:
                for sp in p:
                    tab_lis.append(sp)             
    for i , t in enumerate(tab_lis):
        if t[0] is not None and t[0] in biao_tou:
            biao_i.append(i)
    biao_i.append(len(tab_lis))
    biao_0=[tab_lis[biao_i[j]:biao_i[j+1]] for j in range(len(biao_i)-1)]
    return biao_0

 (3)将上面读取到的表格数据转换为Excel 表格,保存在一个Excel 工作簿中,PDF 文档中有多个表格的,按顺序分别保存为工作表“表1、表2、表3 .......'。

def to_excels(biao,to_url):
    df_shee=[]
    for sh in biao: 
        df_shee.append(pd.DataFrame(sh))
    with pd.ExcelWriter(to_url, mode='w') as writer:
        for j,s in enumerate(df_shee):
            s.to_excel(writer, sheet_name=f'表_{j+1}', index=False,header=False)

(4)设置好PDF文档及Excel文档保存位置,运行 函数    to_excels(biao,to_url),生成初始Excel表格。

if __name__ == '__main__':
    url=r'0906\biao2.pdf'   # 根据 biao2.pdf 实际保存位置修改为正确的路径
    to_url=r'0906\biao2.xlsx'
    biao_tou=['表格标题']
    biao=open_pdf_1(url,biao_tou)
    to_excels(biao,to_url)

 (5 )生成的Excel表格,格式混乱,行没有调整列宽高,还有一些单元格需要合并,接下来会写一段代码来完善这个问题。


总结

      本文仅对一个简单PDF文档进行表格提取,主要使用了 pdfplumber 库来操作PDF文档,提取表格信息,该库的功能十分强大,操作方便,值得推荐。本文对提取的两个表格,根据表格标志行,进行分割,独立保存到Excel 表上,示对Excel表格进行格式化。格式化的代码已经写好,示进行整理,后续会发表的,本文是我这个初学的业余爱好者所写,不足之处,敬请各们大侠指正。

标签:表格,url,Excel,biao,文档,PDF
From: https://blog.csdn.net/Zlb0999_/article/details/143222972

相关文章

  • 在手机打开并编辑pdf文件,在pdf上手绘签名,软件pdf Extra
    前言推荐软件:PDFExtra.apk非常适合在手机查看和基础操作pdf文件下载官网下载PDFExtra打不开?没关系我这有好宝贝密码:llll(四个小写L)https://pan.baidu.com/s/1e-nslJPlitEuSjWsNMp_bw?pwd=llll安装正常手机安装app(apk)签名(手机手写)done.......
  • Excel导入到MySQL里
    0]MySQL报错出现TheMySQLserverisrunningwiththe--secure-file-privoptionsoitcannotexecutethisstatement。解决办法:1.找到mysql的存储路径:  2.打开my.ini(以记事本方式打开即可)[mysqld]secure_file_priv=''  添加该句。3.重启mysql1]先根据X......
  • C++/CLI使用Office.Interop库创建excel,同时解决写入速度慢的问题
    boolWriteExcelFile_OfficeInterop(String^path,DataSet^dt, conststd::vector<std::string>&sheetName,boolhideColumnName) { //Ifthefilealreadyexists,deleteitandthengeneratefile if(System::IO::File::Exists(path)) { try......
  • 俄大神超强PDF编辑软件,强烈推荐!
    随着2024年度,程序员节的到来,分享一下PDF编辑软件,让更多人看到;科技不是高高在上,而是服务与人,人人都能用的上,用得起!今天介绍的这款A.BB.YYFine.Reader,是俄罗斯出品的一款非常好用的PDF软件,其集OCR文字识别、文档处理、文件转换和索引、数据捕获、语言翻译于一体,功能超级强大!这......
  • Windows 资源管理器显示PSD、PDF、AI 等矢量格式缩略图
    1、SageThumbsSageThumbs是一个强大的shell扩展,允许使用Pierre-eGougelet的GFL3.40库(XnViewClassic、XnViewMP 的作者)直接在Windows资源管理器中预览大量图像格式。AI、PS、EPS、PDF支持#要为AdobeIllustrator(ai)、Postscript(ps,eps)和AdobeAcrobat(pdf)文......
  • 自学Python不知道看什么书?10本Python经典好书(附pdf),看完少走一半弯路
    前言Python的语法简单,易于上手,这使得初学者能够快速地掌握编程基础,并迅速投入到实际项目中去。同时Python入门时阅读书籍的作用是多方面的,阅读书籍不仅为初学者提供了系统学习Python的基础、掌握的基础知识,还可以培养他们的编程思维和学习动力,为未来的编程之路打下坚实的基础......
  • XLSX.js解析Excel中的日期格式数据遇到的问题
    使用xlsx.js读取Excel中的日期有两种方式:XLSX.read(file,{type:'binary'})XLSX.read(file,{type:'binary',cellDates:true})通过第一种方式读取日期,解析结果是Excel中保存的数字(Excel会将日期保存为数字。例如,将2020/09/30由日期格式改成文本格式时,会得到一个44104......
  • XLSX.js解析Excel中的数据,<input type='file' />控件中
    在页面中添加一个:<inputtype="file"class="txt"style="width:300px;height:25px;line-height:25px;color:#000000;"id="file01"/>在页面中添加javascript代码:document.getElementById("file01").addEventLis......
  • Java EasyExcel 导出报内存溢出的原因与解决方案
    JavaEasyExcel导出报内存溢出的原因与解决方案在现代企业级应用开发中,数据导出功能是一项常见且重要的任务。随着数据量的不断增长,如何高效、稳定地完成数据导出成为开发者面临的一大挑战。EasyExcel是阿里巴巴开源的一款基于Java的Excel处理工具,它以其高效、简洁的特性,广泛......
  • 如何把一个python列表(有很多个元素)变成一个excel表格的第一列?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者群有个叫【麦当】的粉丝问了一个关于Python如何把一个python列表(有很多个元素)变成一个excel表格的第一列的问题,这里拿出来给大家分享下,一起学习。二、解决过程这里给出【dcpeng】和【德善堂小儿推拿-瑜亮老师】大佬......