【自動化實戰】Python操作Excel/WORD/PDF:openpyxl與docx庫詳解

在現代辦公環境中,我們經常需要處理各種文檔格式,如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文件的基本方法:

  1. openpyxl 提供了強大的Excel操作功能,可以創建、讀取、修改工作簿,支持公式、樣式和圖表
  2. python-docx 使得Word文檔的創建和修改變得簡單,支持段落、表格、樣式等元素
  3. 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

通過掌握這些庫的使用,你將能夠處理大多數辦公自動化場景,從簡單的數據提取到復雜的報告生成,都能得心應手。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98061.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

構建安全的自動駕駛:軟件測試中的編碼規范與AI驗證

自動駕駛不再只是未來想象,它正在以驚人的速度走向現實。但這一變革也帶來了軟件開發的全新命題。與傳統車輛不同,自動駕駛依賴復雜的AI模型、傳感系統和車載決策單元,必須應對更多現實環境的不確定性。在強監管、高風險、快節奏的背景下&…

2025高教社數學建模國賽C題 - NIPT的時點選擇與胎兒的異常判定(完整參考論文)

基于機器學習與統計模型的NIPT檢測優化與異常判定問題研究 摘要 非侵入性產前檢測(NIPT)作為一種無創安全的胎兒染色體異常篩查技術,在現代產前醫療中發揮著重要作用,其準確性與檢測時機及異常判定的科學性直接影響臨床決策。然而,男胎Y染色體濃度受孕周數、孕婦BMI等多…

一種基于注解與AOP的Spring Boot接口限流防刷方案

1. 添加Maven依賴<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupI…

代碼隨想錄二刷之“貪心算法”~GO

簡單題目 1.455. 分發餅干 - 力扣&#xff08;LeetCode&#xff09; func findContentChildren(g []int, s []int) int {sort.Ints(g)sort.Ints(s)index : 0for i : 0;i<len(s);i{if index < len(g) && g[index] < s[i]{index}}return index }感悟&#xff…

Pod自動重啟問題排查:JDK 17 EA版本G1GC Bug導致的應用崩潰

Pod自動重啟問題排查:JDK 17 EA版本G1GC Bug導致的應用崩潰 問題背景 在生產環境中,我們遇到了一個嚴重的穩定性問題:應用Pod頻繁自動重啟,導致服務不穩定。通過深入分析JVM崩潰日志,最終定位到是JDK 17 EA版本中G1GC的一個已知Bug導致的。 問題現象 1. Pod重啟表現 應…

HTML文本格式化標簽

HTML提供了多種標簽用于文本的格式化&#xff0c;這些標簽可以改變文本的外觀&#xff08;如粗細、斜體&#xff09;或賦予文本特定的含義&#xff08;如強調、引用&#xff09;。1. 基本文本樣式標簽&#xff08;1&#xff09;粗體文本使用<b>或<strong>標簽可以使…

數據結構之單鏈表和環形鏈表的應用(二)-

目錄一、相交鏈表二、環形鏈表I三、環形鏈表II總結一、相交鏈表 相交鏈表 首先理解什么是鏈表相交&#xff0c;相交即存在共用的節點&#xff0c;鏈表相交有三種情況&#xff0c; 中間位置相交頭部就開始相交尾部相交 如圖pcurA和pcurB就都有一個next指針指向同一個節點 這…

屬性關鍵字

屬性關鍵字深拷貝與淺拷貝類型各類對象深淺拷貝判斷完全深拷貝的實現屬性關鍵字property、synthesize和dynamic原子操作讀寫權限內存管理strong &#x1f19a; copy總結深拷貝與淺拷貝 先前學習OC時已經對深淺拷貝進行了一次學習&#xff0c;這里進行一個復習總結和補充&#…

突發奇想,還未實踐,在Vben5的Antd模式下,將表單從「JS 配置化」改寫成「模板可視化」形式(豆包版)

在 Vben5 的 Antd 模式下&#xff0c;完全可以將表單從「JS 配置化」改寫成「模板可視化」形式&#xff0c;把表單項直接寫在 Vue 模板中&#xff0c;更直觀且符合傳統 Vue 開發習慣。以下是完整的改寫示例&#xff0c;保留原功能但結構更清晰&#xff1a; 改寫思路 放棄 JS 中…

【更新完畢】2025數學建模國賽E題思路代碼文章高教社杯全國大學生數學建模-AI 輔助智能體測

全部更新完畢 包含完整的文章全部問題的代碼、結果、圖表 完整內容請看文末最后的推廣群基于AI姿態識別的立定跳遠運動分析與個性化訓練優化研究 隨著《國家學生體質健康標準》的頒布實施&#xff0c;通過AI技術輔助體育運動分析已成為提升學生體質健康水平的重要手段。本研究針…

小白友好,無需基礎也能快速上手的AI部署工具,一鍵部署

AI大模型相信已經成為許多人工作和生活中的得力助手。然而&#xff0c;對于大多數普通用戶而言&#xff0c;將強大的AI模型部署到自己的電腦上&#xff0c;似乎是一項遙不可及的技術活&#xff0c;往往涉及到復雜的命令行操作、環境配置和代碼調試。那有沒有一種工具&#xff0…

《Python復刻植物大戰僵尸開源項目實戰:Pygame框架+JSON關卡設計,解鎖塔防游戲開發新技能》?

&#x1f4cc; 大家好&#xff0c;我是智界工具庫&#xff0c;每天分享好用實用且智能的開源項目&#xff0c;以及在JAVA語言開發中遇到的問題&#xff0c;如果本篇文章對您有所幫助&#xff0c;請幫我點個小贊小收藏小關注吧&#xff0c;謝謝喲&#xff01;&#x1f618; 博主…

CCS——將工程中的 include / lib 修改為相對路徑,方便工程分享

在使用 Code Composer Studio (CCS) 開發 DSP 或 ARM 工程時&#xff0c;經常會遇到這樣一個問題&#xff1a;在 A 電腦上能正常編譯的工程&#xff0c;拷貝到 B 電腦上后就報錯。錯誤的原因通常是 工程使用了絕對路徑&#xff0c;而不同電腦上的文件路徑不一致&#xff0c;比如…

java解析網絡大端、小端解析方法

文章目錄一、背景介紹二、說明核心概念&#xff1a;什么是字節序&#xff08;Endianness&#xff09;&#xff1f;大端字節序 (Big-Endian)小端字節序 (Little-Endian)三、不同解析方式介紹一、背景介紹 中轉臺通過SNMP協議V1\V2上報中轉臺IP&#xff0c;然后程序解析入庫&…

【數據分享】土地利用矢量shp數據分享-甘肅

今天要說明數據就是土地利用shp數據分享-甘肅。數據介紹▲ 1km土地利用數據&#xff08;2020年&#xff09;▲ 土地利用數據&#xff08;2025年&#xff09;▲土地利用數據&#xff08;2018年&#xff09;▲ 30m土地利用數據&#xff08;2023年&#xff09;▲ 公路鐵路道路河流…

java log相關:Log4J、Log4J2、LogBack,SLF4J

目錄測試maven依賴logback.xml測試主程序測試輸出arthas查看logger總結使用參考文檔測試 maven依賴 <dependencies><!-- SLF4J API --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>…

AES加密算法詳細加密步驟代碼實現--身份證號碼加解密系統

系統概述 本系統是一個基于AES-256-CBC加密算法的身份證號碼加解密工具&#xff08;手搓底層步驟&#xff09;&#xff0c;針對的是上一篇文章對的AES加密原理的講解&#xff0c;雖說是演示&#xff0c;但功能完善&#xff0c;可單獨提供接口給項目調用&#xff0c;采用Python…

LangChain: Models, Prompts 模型和提示詞

獲取openapikey #!pip install python-dotenv #!pip install openai import osimport openai ? from dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env file openai.api_key os.environ[OPENAI_API_KEY] # account for deprecat…

ACMESSL自動續簽教程

目錄 1、選擇申請證書 ?編輯2、選擇CA機構 ?編輯3、選擇自動驗簽 ?編輯4、證書續簽設置 5、自動發布設置 本教程實現ACMESSL自動續簽&#xff0c;請按照此教程實現。 1、選擇申請證書 點擊快捷入口或者訂單或證書列表中的【創建證書】按鈕&#xff1a; 2、選擇CA機構 …

基于飛算JavaAI的在線圖書借閱平臺設計實現

項目概述與需求分析 1.1 項目背景與意義 隨著數字化時代的快速發展&#xff0c;傳統圖書館管理模式已無法滿足現代讀者的需求。在線圖書借閱平臺通過互聯網技術將圖書資源數字化&#xff0c;為讀者提供便捷的檢索、借閱和管理服務&#xff0c;有效解決了傳統圖書館開放時間有…