[Python]如何將批量的PDF資料匯總為Excel清單?

16 篇文章 0 订阅
9 篇文章 0 订阅

在現今電腦化(或稱無紙化)的辦公環境中,往往因為工作需求需將一些資料在不同辦公文件之間轉移,如若需要呈現簡報(.ppt),可能需將word的部分文字複製到ppt上;若需要分析論文中的表格數據,可能需將pdf轉換成excel。然而,若僅僅是少數文件的轉換,或許可簡單用複製和貼上的功能來處理,但若是批量轉換的工作,為了避免重複性勞力和容易出錯,藉由工具來進行批量轉換才是正確的工作方式。

想像一個情境,當企業辦理講座活動,對各個應邀單位發出報名表,當多張報名表回收時,即需要一個匯總清單,以進一步了解此次參與講座的學員背景/企業寶號/職稱等等。下列是以該情境作為範例,在範例進行之前,先簡易描述完成該項工作的工具結構,如下。

1.在Python中,常用於處理PDF的安裝包有兩個,pdfminer3k和pdfplumber,差異簡易描述如下:

   pdfminer3k:將PDF作純文本轉換工作,常用於自然語言分析工作上。

   pdfplumber:可按頁數處理PDF檔案,同時可將PDF中的表格輸出成list。

2.另外,針對PDF讀取結果,Python需要將結果寫入excel檔案中,可藉由操作excel的安裝包, openpyxl,來處理。

3.為了搭配自動找尋pdf檔案的數量,需要借用安裝包,os,來操作文件和目錄系統。

批量轉換報名表(.pdf),並匯總成excel檔案的簡易範例如下:

a.報名表的原pdf截圖如下,共有三個pdf檔案。

b.幾個主要的代碼段,說明如下:

 1.為了因應檔案個數未知且達成批量轉換,因此借用os指令在資料夾中篩選出目標檔案(.pdf),如# find .pdf file in the folder的代碼段。

 2.將pdf匯入pyrhon中,並將每個pdf檔案中的姓名/職稱/手機/email資料抽取和轉換成list,如# pdf import的代碼段。

 3.將抽取資料存入excel檔案中,其中包含定義sheet和表頭名稱,如# 開啟空白excel, 並存入pdf讀取表格資料的代碼段。

import pdfplumber
from openpyxl import Workbook  # 存取xlsx的安裝包
import os

# list files in the path
file_list = os.listdir()

# find .pdf file in the folder
pdf_file = list()  # build empty list
for file_name in file_list:
    sub_name = file_name.split('.')[1]
    if sub_name == 'pdf':
        pdf_file.append(file_name)

# pdf import
pdf_table = list()
name = list()
title = list()
mobile = list()
email = list()
for i in range(len(pdf_file)):
    pdf = pdfplumber.open(pdf_file[i])
    page = pdf.pages[0]  # get page.1
    pdf_table.append(page.extract_table())
    if pdf_table[i][2][1] != '':
        name.append(pdf_table[i][2][1])
        title.append(pdf_table[i][3][1])
        mobile.append(pdf_table[i][4][1])
        email.append(pdf_table[i][5][1])

# 開啟空白excel, 並存入pdf讀取表格資料
workbook = Workbook()
sheet = workbook.active
sheet.title = "報名匯總"
# 設定A1:姓名 B1:職務 C1:手機 D1:E-mail
row0 = ["姓名", "職務", "手機", "E-mail"]
sheet.append(row0)
for i in range(len(name)):
    sheet.cell(row=2 + i, column=1).value = name[i]
    sheet.cell(row=2 + i, column=2).value = title[i]
    sheet.cell(row=2 + i, column=3).value = mobile[i]
    sheet.cell(row=2 + i, column=4).value = email[i]
workbook.save(filename="報名清單.xlsx")

c.輸出結果如下圖。

-----如果文章對您有幫助,打開微信掃一掃,請作者喝杯咖啡。-----

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值