Python自動(dòng)化操作Excel/Word/PDF的實(shí)戰(zhàn)指南
在現(xiàn)代辦公環(huán)境中,我們經(jīng)常需要處理各種文檔格式,如Excel表格、Word文檔和PDF文件。手動(dòng)處理這些文檔不僅耗時(shí),而且容易出錯(cuò)。Python提供了多個(gè)強(qiáng)大的庫(kù)來(lái)實(shí)現(xiàn)文檔處理的自動(dòng)化,本文將重點(diǎn)介紹如何使用openpyxl和docx庫(kù)來(lái)操作Excel和Word文檔,并簡(jiǎn)要介紹PDF處理的方法。
一、Python操作Excel:openpyxl庫(kù)
1. 安裝openpyxl
pip install openpyxl
2. 基本操作
創(chuàng)建工作簿和工作表
from openpyxl import Workbook
# 創(chuàng)建工作簿
wb = Workbook()
# 獲取默認(rèn)激活的工作表
ws = wb.active
# 設(shè)置工作表標(biāo)題
ws.title = "員工數(shù)據(jù)"
# 創(chuàng)建新工作表
ws1 = wb.create_sheet("部門(mén)統(tǒng)計(jì)") # 插入在最后
ws2 = wb.create_sheet("薪資匯總", 0) # 插入在第一個(gè)位置
# 保存工作簿
wb.save("公司數(shù)據(jù).xlsx")
讀取和寫(xiě)入數(shù)據(jù)
from openpyxl import load_workbook
# 加載現(xiàn)有工作簿
wb = load_workbook('公司數(shù)據(jù).xlsx')
# 選擇工作表
ws = wb['員工數(shù)據(jù)']
# 寫(xiě)入數(shù)據(jù)
ws['A1'] = '員工ID'
ws['B1'] = '姓名'
ws['C1'] = '部門(mén)'
ws['D1'] = '薪資'
# 批量寫(xiě)入數(shù)據(jù)
data = [
[1, '張三', '技術(shù)部', 15000],
[2, '李四', '市場(chǎng)部', 12000],
[3, '王五', '財(cái)務(wù)部', 13000],
[4, '趙六', '技術(shù)部', 16000]
]
for row in data:
ws.append(row)
# 讀取數(shù)據(jù)
for row in ws.iter_rows(min_row=2, max_row=5, values_only=True):
print(f"員工{row[1]} 在{row[2]}部門(mén),薪資為{row[3]}")
# 保存更改
wb.save('公司數(shù)據(jù).xlsx')
高級(jí)功能:公式、樣式和圖表
from openpyxl.styles import Font, Alignment, PatternFill
from openpyxl.chart import BarChart, Reference
# 設(shè)置標(biāo)題行樣式
bold_font = Font(bold=True, size=12)
fill = PatternFill(fill_type="solid", fgColor="DDDDDD")
align_center = Alignment(horizontal="center")
for cell in ws[1]:
cell.font = bold_font
cell.fill = fill
cell.alignment = align_center
# 添加公式計(jì)算平均薪資
ws['E1'] = '平均薪資'
ws['E2'] = '=AVERAGE(D2:D5)'
# 創(chuàng)建圖表
chart = BarChart()
chart.title = "部門(mén)薪資對(duì)比"
chart.x_axis.title = "員工"
chart.y_axis.title = "薪資"
data = Reference(ws, min_col=4, min_row=1, max_row=5)
categories = Reference(ws, min_col=2, min_row=2, max_row=5)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
ws.add_chart(chart, "G2")
wb.save('公司數(shù)據(jù)_增強(qiáng).xlsx')
二、Python操作Word:python-docx庫(kù)
1. 安裝python-docx
pip install python-docx
2. 基本操作
創(chuàng)建文檔和添加內(nèi)容
from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
# 創(chuàng)建新文檔
doc = Document()
# 添加標(biāo)題
doc.add_heading('公司季度報(bào)告', 0)
# 添加段落
p = doc.add_paragraph('本季度公司業(yè)績(jī)表現(xiàn)良好,各部門(mén)均完成了既定目標(biāo)。')
p.add_run('特別是技術(shù)部門(mén)').bold = True
p.add_run(',超額完成了項(xiàng)目開(kāi)發(fā)任務(wù)。')
# 添加二級(jí)標(biāo)題
doc.add_heading('部門(mén)業(yè)績(jī)?cè)斍?, level=2)
# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'
# 設(shè)置表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '部門(mén)'
hdr_cells[1].text = '目標(biāo)完成率'
hdr_cells[2].text = '同比增長(zhǎng)'
# 添加數(shù)據(jù)
data = [
['技術(shù)部', '120%', '15%'],
['市場(chǎng)部', '95%', '8%'],
['財(cái)務(wù)部', '100%', '5%']
]
for dept, rate, growth in data:
row_cells = table.add_row().cells
row_cells[0].text = dept
row_cells[1].text = rate
row_cells[2].text = growth
# 添加分頁(yè)符
doc.add_page_break()
# 添加另一個(gè)章節(jié)
doc.add_heading('下一步計(jì)劃', level=2)
doc.add_paragraph(
'1. 擴(kuò)大技術(shù)團(tuán)隊(duì)規(guī)模', style='List Number'
)
doc.add_paragraph(
'2. 開(kāi)拓新市場(chǎng)', style='List Number'
)
doc.add_paragraph(
'3. 優(yōu)化財(cái)務(wù)管理流程', style='List Number'
)
# 保存文檔
doc.save('季度報(bào)告.docx')
讀取和修改現(xiàn)有文檔
from docx import Document
# 打開(kāi)現(xiàn)有文檔
doc = Document('季度報(bào)告.docx')
# 讀取內(nèi)容
full_text = []
for paragraph in doc.paragraphs:
full_text.append(paragraph.text)
print('\n'.join(full_text))
# 修改內(nèi)容
for paragraph in doc.paragraphs:
if '技術(shù)部門(mén)' in paragraph.text:
paragraph.text = paragraph.text.replace('技術(shù)部門(mén)', '研發(fā)中心')
# 保存修改后的文檔
doc.save('季度報(bào)告_修改版.docx')
三、Python操作PDF
1. 常用PDF處理庫(kù)
- PyPDF2:用于拆分、合并、裁剪和轉(zhuǎn)換PDF頁(yè)面
- pdfminer:用于提取PDF中的文本和元數(shù)據(jù)
- ReportLab:用于創(chuàng)建PDF文檔
- pdfkit:將HTML轉(zhuǎn)換為PDF(基于wkhtmltopdf)
2. 基本PDF操作示例
合并PDF文件
import PyPDF2
def merge_pdfs(paths, output):
pdf_writer = PyPDF2.PdfWriter()
for path in paths:
pdf_reader = PyPDF2.PdfReader(path)
for page in range(len(pdf_reader.pages)):
pdf_writer.add_page(pdf_reader.pages[page])
with open(output, 'wb') as out:
pdf_writer.write(out)
# 使用示例
merge_pdfs(['file1.pdf', 'file2.pdf'], 'merged.pdf')
提取PDF文本
from pdfminer.high_level import extract_text
text = extract_text('document.pdf')
print(text)
四、實(shí)戰(zhàn)案例:自動(dòng)化生成報(bào)告
下面是一個(gè)綜合案例,演示如何從Excel讀取數(shù)據(jù),然后生成Word報(bào)告和PDF報(bào)告。
from openpyxl import load_workbook
from docx import Document
import pdfkit
# 1. 從Excel讀取數(shù)據(jù)
wb = load_workbook('公司數(shù)據(jù).xlsx')
ws = wb.active
dept_data = {}
for row in ws.iter_rows(min_row=2, values_only=True):
dept = row[2]
salary = row[3]
if dept not in dept_data:
dept_data[dept] = {
'count': 0,
'total_salary': 0,
'max_salary': 0
}
dept_data[dept]['count'] += 1
dept_data[dept]['total_salary'] += salary
if salary > dept_data[dept]['max_salary']:
dept_data[dept]['max_salary'] = salary
# 計(jì)算平均薪資
for dept in dept_data:
dept_data[dept]['avg_salary'] = dept_data[dept]['total_salary'] / dept_data[dept]['count']
# 2. 生成Word報(bào)告
doc = Document()
doc.add_heading('公司部門(mén)統(tǒng)計(jì)報(bào)告', 0)
# 添加摘要段落
doc.add_paragraph(
f本報(bào)告基于員工數(shù)據(jù)統(tǒng)計(jì)分析,共涵蓋{len(dept_data)}個(gè)部門(mén)。'
)
# 添加表格
table = doc.add_table(rows=1, cols=4)
table.style = 'Table Grid'
# 表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '部門(mén)'
hdr_cells[1].text = '員工數(shù)'
hdr_cells[2].text = '平均薪資'
hdr_cells[3].text = '最高薪資'
# 表格數(shù)據(jù)
for dept, data in dept_data.items():
row_cells = table.add_row().cells
row_cells[0].text = dept
row_cells[1].text = str(data['count'])
row_cells[2].text = f"{data['avg_salary']:.2f}"
row_cells[3].text = str(data['max_salary'])
doc.add_paragraph('\n報(bào)告生成時(shí)間:2023年11月1日')
doc.save('部門(mén)統(tǒng)計(jì)報(bào)告.docx')
# 3. 轉(zhuǎn)換為PDF
# 需要先安裝wkhtmltopdf并設(shè)置路徑
# path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
# config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
# pdfkit.from_file('部門(mén)統(tǒng)計(jì)報(bào)告.docx', '部門(mén)統(tǒng)計(jì)報(bào)告.pdf') # 注意:這種方法需要docx能正確轉(zhuǎn)換為HTML
print("報(bào)告生成完成!")
五、總結(jié)
本文介紹了使用Python操作Excel、Word和PDF文件的基本方法:
- openpyxl 提供了強(qiáng)大的Excel操作功能,可以創(chuàng)建、讀取、修改工作簿,支持公式、樣式和圖表
- python-docx 使得Word文檔的創(chuàng)建和修改變得簡(jiǎn)單,支持段落、表格、樣式等元素
- PDF處理可以使用多個(gè)庫(kù),根據(jù)需求選擇合適的工具
通過(guò)這些工具,我們可以實(shí)現(xiàn)辦公文檔處理的自動(dòng)化,大大提高工作效率和準(zhǔn)確性。在實(shí)際應(yīng)用中,可以根據(jù)具體需求組合使用這些庫(kù),構(gòu)建復(fù)雜的文檔處理流程。
以上就是Python自動(dòng)化操作Excel/Word/PDF的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Python自動(dòng)化辦公的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python實(shí)現(xiàn)pdf轉(zhuǎn)word和excel的示例代碼
- 使用Python實(shí)現(xiàn)Office文檔(Word/Excel/PowerPoint)批量轉(zhuǎn)換為PDF
- Python將Office文檔(Word、Excel、PDF、PPT)轉(zhuǎn)為OFD格式的實(shí)現(xiàn)方法
- python實(shí)現(xiàn)word/excel/ppt批量轉(zhuǎn)pdf的示例代碼
- Python批量實(shí)現(xiàn)Word/EXCEL/PPT轉(zhuǎn)PDF
- Python讀取pdf、word、excel、ppt、csv和txt文件提取所有文本
- Python自動(dòng)化辦公實(shí)戰(zhàn)案例詳解(Word、Excel、Pdf、Email郵件)
相關(guān)文章
使用Django和Postgres進(jìn)行全文搜索的實(shí)例代碼
這篇文章主要介紹了使用Django和Postgres進(jìn)行全文搜索,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Python中的標(biāo)簽編碼和獨(dú)熱編碼示例詳解
標(biāo)簽編碼是一種用于將分類(lèi)列轉(zhuǎn)換為數(shù)值列的技術(shù),以便它們可以通過(guò)僅采用數(shù)值數(shù)據(jù)的機(jī)器學(xué)習(xí)模型進(jìn)行擬合,這篇文章主要介紹了Python中的標(biāo)簽編碼和獨(dú)熱編碼,需要的朋友可以參考下2023-07-07
使用grappelli為django admin后臺(tái)添加模板
本文介紹了一款非常流行的Django模板系統(tǒng)--grappelli,以及如何給Django的admin后臺(tái)添加模板,非常的實(shí)用,這里推薦給大家。2014-11-11
python中關(guān)于eval函數(shù)的使用及說(shuō)明
這篇文章主要介紹了python中關(guān)于eval函數(shù)的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
非常全面的Python常見(jiàn)基礎(chǔ)面試題及答案
Python是目前編程領(lǐng)域最受歡迎的語(yǔ)言,Python可用于許多領(lǐng)域,Web應(yīng)用程序開(kāi)發(fā),自動(dòng)化,數(shù)學(xué)建模,大數(shù)據(jù)應(yīng)用程序等等,這篇文章主要給大家介紹了關(guān)于Python常見(jiàn)基礎(chǔ)面試題及答案的相關(guān)資料,需要的朋友可以參考下2021-09-09

