在現代辦公環境中,我們經常需要處理各種文檔格式,如Excel表格、Word文檔和PDF文件。手動處理這些文檔不僅耗時,而且容易出錯。Python提供了多個強大的庫來實現文檔處理的自動化,本文將重點介紹如何使用openpyxl和docx庫來操作Excel和Word文檔,并簡要介紹PDF處理的方法。
一、Python操作Excel:openpyxl庫
1. 安裝openpyxl
pip install openpyxl
2. 基本操作
創建工作簿和工作表
from openpyxl import Workbook# 創建工作簿
wb = Workbook()# 獲取默認激活的工作表
ws = wb.active# 設置工作表標題
ws.title = "員工數據"# 創建新工作表
ws1 = wb.create_sheet("部門統計") # 插入在最后
ws2 = wb.create_sheet("薪資匯總", 0) # 插入在第一個位置# 保存工作簿
wb.save("公司數據.xlsx")
讀取和寫入數據
from openpyxl import load_workbook# 加載現有工作簿
wb = load_workbook('公司數據.xlsx')# 選擇工作表
ws = wb['員工數據']# 寫入數據
ws['A1'] = '員工ID'
ws['B1'] = '姓名'
ws['C1'] = '部門'
ws['D1'] = '薪資'# 批量寫入數據
data = [[1, '張三', '技術部', 15000],[2, '李四', '市場部', 12000],[3, '王五', '財務部', 13000],[4, '趙六', '技術部', 16000]
]for row in data:ws.append(row)# 讀取數據
for row in ws.iter_rows(min_row=2, max_row=5, values_only=True):print(f"員工{row[1]} 在{row[2]}部門,薪資為{row[3]}")# 保存更改
wb.save('公司數據.xlsx')
高級功能:公式、樣式和圖表
from openpyxl.styles import Font, Alignment, PatternFill
from openpyxl.chart import BarChart, Reference# 設置標題行樣式
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_fontcell.fill = fillcell.alignment = align_center# 添加公式計算平均薪資
ws['E1'] = '平均薪資'
ws['E2'] = '=AVERAGE(D2:D5)'# 創建圖表
chart = BarChart()
chart.title = "部門薪資對比"
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('公司數據_增強.xlsx')
二、Python操作Word:python-docx庫
1. 安裝python-docx
pip install python-docx
2. 基本操作
創建文檔和添加內容
from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH# 創建新文檔
doc = Document()# 添加標題
doc.add_heading('公司季度報告', 0)# 添加段落
p = doc.add_paragraph('本季度公司業績表現良好,各部門均完成了既定目標。')
p.add_run('特別是技術部門').bold = True
p.add_run(',超額完成了項目開發任務。')# 添加二級標題
doc.add_heading('部門業績詳情', level=2)# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'# 設置表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '部門'
hdr_cells[1].text = '目標完成率'
hdr_cells[2].text = '同比增長'# 添加數據
data = [['技術部', '120%', '15%'],['市場部', '95%', '8%'],['財務部', '100%', '5%']
]for dept, rate, growth in data:row_cells = table.add_row().cellsrow_cells[0].text = deptrow_cells[1].text = raterow_cells[2].text = growth# 添加分頁符
doc.add_page_break()# 添加另一個章節
doc.add_heading('下一步計劃', level=2)
doc.add_paragraph('1. 擴大技術團隊規模', style='List Number'
)
doc.add_paragraph('2. 開拓新市場', style='List Number'
)
doc.add_paragraph('3. 優化財務管理流程', style='List Number'
)# 保存文檔
doc.save('季度報告.docx')
讀取和修改現有文檔
from docx import Document# 打開現有文檔
doc = Document('季度報告.docx')# 讀取內容
full_text = []
for paragraph in doc.paragraphs:full_text.append(paragraph.text)print('\n'.join(full_text))# 修改內容
for paragraph in doc.paragraphs:if '技術部門' in paragraph.text:paragraph.text = paragraph.text.replace('技術部門', '研發中心')# 保存修改后的文檔
doc.save('季度報告_修改版.docx')
三、Python操作PDF
1. 常用PDF處理庫
- PyPDF2:用于拆分、合并、裁剪和轉換PDF頁面
- pdfminer:用于提取PDF中的文本和元數據
- ReportLab:用于創建PDF文檔
- pdfkit:將HTML轉換為PDF(基于wkhtmltopdf)
2. 基本PDF操作示例
合并PDF文件
import PyPDF2def 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_texttext = extract_text('document.pdf')
print(text)
四、實戰案例:自動化生成報告
下面是一個綜合案例,演示如何從Excel讀取數據,然后生成Word報告和PDF報告。
from openpyxl import load_workbook
from docx import Document
import pdfkit# 1. 從Excel讀取數據
wb = load_workbook('公司數據.xlsx')
ws = wb.activedept_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'] += 1dept_data[dept]['total_salary'] += salaryif salary > dept_data[dept]['max_salary']:dept_data[dept]['max_salary'] = salary# 計算平均薪資
for dept in dept_data:dept_data[dept]['avg_salary'] = dept_data[dept]['total_salary'] / dept_data[dept]['count']# 2. 生成Word報告
doc = Document()
doc.add_heading('公司部門統計報告', 0)# 添加摘要段落
doc.add_paragraph(f本報告基于員工數據統計分析,共涵蓋{len(dept_data)}個部門。'
)# 添加表格
table = doc.add_table(rows=1, cols=4)
table.style = 'Table Grid'# 表頭
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '部門'
hdr_cells[1].text = '員工數'
hdr_cells[2].text = '平均薪資'
hdr_cells[3].text = '最高薪資'# 表格數據
for dept, data in dept_data.items():row_cells = table.add_row().cellsrow_cells[0].text = deptrow_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報告生成時間:2023年11月1日')
doc.save('部門統計報告.docx')# 3. 轉換為PDF
# 需要先安裝wkhtmltopdf并設置路徑
# path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
# config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
# pdfkit.from_file('部門統計報告.docx', '部門統計報告.pdf') # 注意:這種方法需要docx能正確轉換為HTMLprint("報告生成完成!")
五、總結
本文介紹了使用Python操作Excel、Word和PDF文件的基本方法:
- openpyxl 提供了強大的Excel操作功能,可以創建、讀取、修改工作簿,支持公式、樣式和圖表
- python-docx 使得Word文檔的創建和修改變得簡單,支持段落、表格、樣式等元素
- PDF處理可以使用多個庫,根據需求選擇合適的工具
通過這些工具,我們可以實現辦公文檔處理的自動化,大大提高工作效率和準確性。在實際應用中,可以根據具體需求組合使用這些庫,構建復雜的文檔處理流程。
六、進一步學習資源
- openpyxl官方文檔:https://openpyxl.readthedocs.io/
- python-docx官方文檔:https://python-docx.readthedocs.io/
- PyPDF2文檔:https://pypi.org/project/PyPDF2/
- ReportLab文檔:https://www.reportlab.com/docs/reportlab-userguide.pdf
通過掌握這些庫的使用,你將能夠處理大多數辦公自動化場景,從簡單的數據提取到復雜的報告生成,都能得心應手。