最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用openpyxl自動化處理Excel數(shù)據(jù)與文件詳解

 更新時間:2026年03月06日 09:18:20   作者:MarkHD  
在職場中,Excel無疑是最核心的數(shù)據(jù)處理工具之一,本文將為大家詳細介紹Python操作Excel的利器openpyxl庫,從而實現(xiàn)辦公自動化,感興趣的小伙伴可以了解下

在職場中,Excel無疑是最核心的數(shù)據(jù)處理工具之一。然而,面對每周、每日都要重復(fù)的數(shù)據(jù)錄入、報表匯總和格式調(diào)整,人工操作不僅效率低下,還極易出錯。進入我們學(xué)習(xí)計劃的第四階段(第36-50天),我們的核心目標是讓機器人學(xué)會“讀寫算”,能夠高效處理Excel、PDF、CSV等常見辦公文檔。本文將作為本階段的開篇,深度聚焦于Python操作Excel的利器——openpyxl庫,帶你從零開始,掌握讀寫單元格、應(yīng)用公式、美化樣式、管理工作表乃至創(chuàng)建動態(tài)圖表的全套技能。

一、 為什么是openpyxl?—— 自動化辦公的第一選擇

在Python生態(tài)中,操作Excel的庫有很多,如pandas、xlrd/xlwt、xlwings等。但如果你需要處理的是現(xiàn)代Excel文件(.xlsx格式),且希望在保留原有格式的基礎(chǔ)上進行讀寫,甚至操作圖表和樣式,openpyxl無疑是最佳通用選擇 。

核心優(yōu)勢

  • 原生支持.xlsx:專門針對Excel 2010及以后的版本設(shè)計。
  • 保留樣式與公式:不同于某些僅處理數(shù)據(jù)的庫,openpyxl在修改單元格內(nèi)容時,能夠完美保留原有的字體、顏色、邊框和公式 。
  • 功能全面:不僅支持讀寫數(shù)據(jù),還支持創(chuàng)建圖表、設(shè)置樣式、合并單元格、添加數(shù)據(jù)驗證等高級功能 。
  • 內(nèi)存優(yōu)化:對于大文件,openpyxl提供了只讀和只寫模式,可以有效降低內(nèi)存消耗。

在開始我們的“讀寫算”之旅前,請先確保你的環(huán)境中已安裝該庫。打開終端,輸入以下命令:

pip install openpyxl

二、 核心概念:工作簿、工作表、單元格

在開始編碼之前,理解openpyxl的三個核心層級至關(guān)重要。你可以把Excel文件想象成一本由若干頁紙組成的賬本 :

  • 工作簿(Workbook):代表整個Excel文件(如“銷售報表.xlsx”)。這是最頂層的容器。
  • 工作表(Worksheet):代表工作簿中的每一頁(如“Sheet1”、“一月數(shù)據(jù)”)。一個工作簿可以包含多個工作表。
  • 單元格(Cell):工作表中最基本的存儲單元,由行和列的坐標定位(如A1, B3)。

我們對Excel的所有操作,本質(zhì)上都是通過openpyxl創(chuàng)建或加載一個Workbook對象,然后從中獲取指定的Worksheet,最后對Worksheet中的Cell進行讀寫或樣式設(shè)置。

三、讀寫單元格與公式應(yīng)用——讓Python學(xué)會“讀寫”

3.1 讀取Excel數(shù)據(jù):讓Python“看懂”表格

假設(shè)我們有一個現(xiàn)有的Excel文件“銷售數(shù)據(jù).xlsx”,我們需要讀取其中的數(shù)據(jù)。使用load_workbook()函數(shù)是讀取的起點 。

from openpyxl import load_workbook

# 1. 加載工作簿
workbook = load_workbook('銷售數(shù)據(jù).xlsx')

# 2. 獲取工作表 (通過名稱或活動表)
# sheet = workbook['Sheet1'] # 通過名稱
sheet = workbook.active # 獲取當(dāng)前活動的工作表

# 3. 讀取特定單元格的值
cell_a1 = sheet['A1'].value
print(f"A1單元格的內(nèi)容是:{cell_a1}")

# 或者使用cell方法,指定行和列 (行和列索引都從1開始)
cell_b2 = sheet.cell(row=2, column=2).value
print(f"B2單元格的內(nèi)容是:{cell_b2}")

# 4. 遍歷整個工作表的數(shù)據(jù)
print("--- 工作表全部數(shù)據(jù) ---")
for row in sheet.iter_rows(values_only=True): # values_only=True直接返回值,而不是cell對象
    print(row)

# 操作完成后記得關(guān)閉工作簿釋放資源
workbook.close()

應(yīng)用場景:你可以將此代碼嵌入到每日的數(shù)據(jù)匯總?cè)蝿?wù)中,自動從多個部門發(fā)來的Excel中提取關(guān)鍵指標,無需手動打開每個文件查看 。

3.2 寫入數(shù)據(jù)與公式:讓Python“填寫”報表

僅僅讀取是不夠的,我們更需要自動生成報表。接下來,我們將創(chuàng)建一個新的工作簿,并寫入銷售數(shù)據(jù)。同時,我們將展示如何寫入Excel公式,讓Excel自動計算“總價”,實現(xiàn)“算”的功能 。

from openpyxl import Workbook

# 1. 創(chuàng)建一個新的工作簿
workbook = Workbook()
sheet = workbook.active
sheet.title = "手機銷售數(shù)據(jù)" # 重命名工作表

# 2. 寫入表頭
headers = ['銷售員', '產(chǎn)品', '銷量', '單價', '總價']
sheet.append(headers) # append方法可以方便地添加一行數(shù)據(jù)

# 3. 寫入原始數(shù)據(jù) (銷量和單價)
raw_data = [
    ['張三', 'iPhone 15', 10, 6000],
    ['李四', '小米14', 15, 4000],
    ['王五', '華為Mate 60', 8, 7000],
]

for row_data in raw_data:
    sheet.append(row_data)

# 4. 寫入公式 (計算總價)
# 總價 = 銷量 * 單價。對于第一行數(shù)據(jù),銷量在C2單元格,單價在D2單元格,所以公式是 "=C2*D2"
sheet['E2'] = '=C2*D2'
sheet['E3'] = '=C3*D3'
sheet['E4'] = '=C4*D4'

# 為了讓效果更明顯,我們也可以使用循環(huán)批量寫入公式
# for i in range(2, 5):
#     sheet[f'E{i}'] = f'=C{i}*D{i}'

# 5. 保存工作簿
workbook.save('手機銷售報表_生成.xlsx')
print("報表生成成功!")

運行這段代碼,你會發(fā)現(xiàn)在生成的Excel文件中,“總價”列已經(jīng)自動計算出了正確的結(jié)果。這正是“讀寫算”中“算”的初步體現(xiàn)。通過Python寫入公式,我們讓Excel引擎承擔(dān)了計算工作,既準確又高效 。

四、美化樣式——告別千篇一律的“黑白表格”

數(shù)據(jù)填充完畢,但一張專業(yè)的報表還需要清晰的格式。手動設(shè)置字體、對齊方式、背景色不僅枯燥,而且難以保證每次報表風(fēng)格一致。openpyxl提供了強大的styles模塊,讓Python替我們完成美化工作 。

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment

# 創(chuàng)建工作簿和數(shù)據(jù)
workbook = Workbook()
sheet = workbook.active
sheet.title = "銷售數(shù)據(jù)報表"

# 準備數(shù)據(jù)
headers = ['產(chǎn)品名稱', '銷量', '單價', '總價']
data = [
    ['鍵盤', 100, 120.00],
    ['鼠標', 150, 80.50],
    ['顯示器', 50, 1200.00],
]
sheet.append(headers)
for row in data:
    # 先添加數(shù)據(jù),總價列稍后用公式填充
    sheet.append(row)

# 添加總價公式
sheet['D2'] = '=B2*C2'
sheet['D3'] = '=B3*C3'
sheet['D4'] = '=B4*C4'

# ----- 開始美化 -----

# 1. 設(shè)置標題行樣式:加粗、藍色字體、黃色背景、居中
header_font = Font(name='微軟雅黑', bold=True, size=12, color='000000FF') # 藍色
header_fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid') # 黃色
header_alignment = Alignment(horizontal='center', vertical='center')

for cell in sheet['1']: # 遍歷第一行的所有單元格
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = header_alignment

# 2. 為數(shù)據(jù)區(qū)域添加邊框
thin_border = Border(
    left=Side(style='thin'),
    right=Side(style='thin'),
    top=Side(style='thin'),
    bottom=Side(style='thin')
)
for row in sheet.iter_rows(min_row=1, max_row=sheet.max_row, min_col=1, max_col=sheet.max_column):
    for cell in row:
        cell.border = thin_border

# 3. 設(shè)置貨幣格式 (單價和總價列)
from openpyxl.styles import numbers
for row in range(2, sheet.max_row + 1):
    sheet[f'C{row}'].number_format = numbers.FORMAT_CURRENCY_CN # 人民幣格式
    sheet[f'D{row}'].number_format = numbers.FORMAT_CURRENCY_CN

# 4. 調(diào)整列寬
sheet.column_dimensions['A'].width = 20
sheet.column_dimensions['B'].width = 10
sheet.column_dimensions['C'].width = 15
sheet.column_dimensions['D'].width = 15

workbook.save('手機銷售報表_美化.xlsx')
print("美化完成!")

通過以上代碼,我們批量設(shè)置了字體、背景色、邊框和數(shù)字格式。整個過程完全自動化,確保每個月的報表風(fēng)格完全一致,專業(yè)度瞬間提升 。

五、操作工作表與創(chuàng)建圖表——讓數(shù)據(jù)“可視化”

5.1 管理工作表

隨著業(yè)務(wù)復(fù)雜度增加,一個工作簿中往往包含多個工作表。openpyxl允許我們像操作Excel一樣,對工作表進行創(chuàng)建、復(fù)制和刪除 。

from openpyxl import Workbook

workbook = Workbook()
# 默認會有一個名為'Sheet'的工作表

# 1. 創(chuàng)建新工作表
sheet1 = workbook.create_sheet('產(chǎn)品銷售') # 默認插在最后
sheet2 = workbook.create_sheet('銷售員績效', 0) # 指定位置,插在第一個(索引0)

# 2. 獲取所有工作表名稱
print(workbook.sheetnames) # 輸出: ['銷售員績效', 'Sheet', '產(chǎn)品銷售']

# 3. 刪除工作表
del workbook['Sheet'] # 刪除默認的工作表

# 4. 復(fù)制工作表
if '產(chǎn)品銷售' in workbook.sheetnames:
    source_sheet = workbook['產(chǎn)品銷售']
    # 復(fù)制的工作表會自動命名,如'產(chǎn)品銷售 Copy'
    workbook.copy_worksheet(source_sheet)

print(workbook.sheetnames) # 輸出: ['銷售員績效', '產(chǎn)品銷售', '產(chǎn)品銷售 Copy']

workbook.save('工作表操作示例.xlsx')

這一功能在需要根據(jù)模板批量生成報表時非常實用 。

5.2 創(chuàng)建圖表(數(shù)據(jù)可視化)

枯燥的數(shù)字很難讓人一眼看出趨勢。openpyxl支持直接在Excel中嵌入圖表,如柱狀圖、折線圖等。下面,我們基于前面的銷售數(shù)據(jù),創(chuàng)建一個銷售額的柱狀圖 。

from openpyxl import load_workbook
from openpyxl.chart import BarChart, Reference

# 加載我們之前美化過的文件
workbook = load_workbook('手機銷售報表_美化.xlsx')
sheet = workbook['銷售數(shù)據(jù)報表']

# 1. 創(chuàng)建一個柱狀圖對象
chart = BarChart()
chart.title = "產(chǎn)品銷售額分析"
chart.x_axis.title = "產(chǎn)品名稱"
chart.y_axis.title = "銷售額(元)"

# 2. 定義數(shù)據(jù)和分類的范圍
# 數(shù)據(jù):總價列的數(shù)據(jù) (D2:D4)
data = Reference(sheet, min_col=4, min_row=2, max_row=4)
# 分類:產(chǎn)品名稱列 (A2:A4) 作為X軸的標簽
categories = Reference(sheet, min_col=1, min_row=2, max_row=4)

# 3. 將數(shù)據(jù)和分類添加到圖表
chart.add_data(data, titles_from_data=False) # titles_from_data=False表示數(shù)據(jù)區(qū)域不包含標題
chart.set_categories(categories)

# 4. 將圖表插入到工作表,例如E1單元格的位置
sheet.add_chart(chart, 'E1')

workbook.save('手機銷售報表_含圖表.xlsx')
print("圖表創(chuàng)建成功!")

打開生成的Excel文件,你會看到一個直觀的柱狀圖已經(jīng)呈現(xiàn)在表格旁邊。圖表會隨著源數(shù)據(jù)的改變而自動更新。通過循環(huán),我們甚至可以一次性為多個數(shù)據(jù)列創(chuàng)建多個圖表 。這標志著我們不僅能讓機器人“讀寫算”,還能讓它產(chǎn)出具有洞察力的可視化報告。

六、 實戰(zhàn)技巧:使用模板與注意事項

為了達到95分以上的高質(zhì)量自動化,我們還需要掌握一些高級技巧。

6.1 高效使用模板

在實際企業(yè)應(yīng)用中,更常見的做法不是用代碼從頭搭建報表,而是基于一個設(shè)計好的模板進行填充 。這樣做的好處是:

  • 格式分離:復(fù)雜的格式(Logo、頁眉頁腳、合并單元格、預(yù)定義樣式)可以在Excel中由專業(yè)設(shè)計師完成。
  • 維護方便:如果需要修改報表樣式,只需修改模板文件,無需改動Python代碼。

實現(xiàn)步驟

  • 設(shè)計模板:在Excel中創(chuàng)建一個template.xlsx文件,設(shè)置好所有靜態(tài)內(nèi)容、標題、公式和占位符。
  • 加載模板wb = openpyxl.load_workbook(‘template.xlsx’)
  • 填充數(shù)據(jù):定位到占位符區(qū)域(如A2開始),用循環(huán)sheet.append(data)填充動態(tài)數(shù)據(jù)。
  • 另存為新文件wb.save(‘月度報告_2025年7月.xlsx’)

這種方式完美地保留了模板中的所有樣式和靜態(tài)公式,是生成周報、月報的標準姿勢 。

6.2 避坑指南

  • 僅支持.xlsx:openpyxl不能處理舊版的.xls文件。如果遇到.xls,需要先另存為.xlsx或使用xlrd庫讀取 。
  • 公式語言:寫入公式時,必須使用英文函數(shù)名和英文分隔符(逗號),因為openpyxl生成的是英文版的Excel公式。例如,求和要用=SUM(A1:A10),而不是中文版的=求和(A1:A10) 。
  • 圖表更新:如果你用openpyxl打開一個含有圖表的模板,僅僅修改數(shù)據(jù)源后保存,圖表有時會丟失。最穩(wěn)妥的方法是,在代碼中重新創(chuàng)建圖表并綁定數(shù)據(jù),正如我們在5.2節(jié)所做的那樣 。
  • 大文件性能:處理超大文件(幾十MB)時,默認的加載模式會將整個文件讀入內(nèi)存,可能導(dǎo)致內(nèi)存溢出。此時應(yīng)考慮使用read_onlywrite_only模式 。

七、 總結(jié)

通過本文的深度拆解,我們從零開始,完整地走通了openpyxl自動化Excel的四大核心步驟:

  • 讀寫單元格:掌握了load_workbookWorkbook的基本用法,實現(xiàn)了數(shù)據(jù)的輸入與輸出 。
  • 應(yīng)用公式:學(xué)會了如何在單元格中寫入公式,讓Excel引擎完成計算任務(wù) 。
  • 美化樣式:利用Font、PatternFill、Border等組件,讓報表告別粗糙,走向?qū)I(yè) 。
  • 高級操作:實現(xiàn)了工作表的創(chuàng)建與刪除,并成功創(chuàng)建了動態(tài)圖表,讓數(shù)據(jù)可視化變得觸手可及 。

到此這篇關(guān)于Python使用openpyxl自動化處理Excel數(shù)據(jù)與文件詳解的文章就介紹到這了,更多相關(guān)Python openpyxl處理Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python configparser模塊配置文件過程解析

    Python configparser模塊配置文件過程解析

    這篇文章主要介紹了Python configparser模塊配置文件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 懶人必備Python代碼之自動發(fā)送郵件

    懶人必備Python代碼之自動發(fā)送郵件

    在傳統(tǒng)的工作中,發(fā)送會議紀要是一個比較繁瑣的任務(wù),需要手動輸入郵件內(nèi)容、收件人、抄送人等信息,每次發(fā)送都需要重復(fù)操作,不僅費時費力,而且容易出現(xiàn)疏漏和錯誤。本文就來用Python代碼實現(xiàn)這一功能吧
    2023-05-05
  • 基于Python的EasyGUI學(xué)習(xí)實踐

    基于Python的EasyGUI學(xué)習(xí)實踐

    這篇文章主要介紹了基于Python的EasyGUI學(xué)習(xí)實踐,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python無損壓縮圖片的示例代碼

    Python無損壓縮圖片的示例代碼

    這篇文章主要介紹了Python無損壓縮圖片的方法,簡單的代碼即可實現(xiàn)壓縮圖片,感興趣的朋友可以了解下
    2020-08-08
  • 基于Python爬取京東雙十一商品價格曲線

    基于Python爬取京東雙十一商品價格曲線

    這篇文章主要介紹了基于Python爬取雙十一商品價格曲線,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Python中HTTP請求的全面指南

    Python中HTTP請求的全面指南

    在現(xiàn)代網(wǎng)絡(luò)應(yīng)用中,HTTP(HyperText Transfer Protocol)協(xié)議是客戶端與服務(wù)器之間數(shù)據(jù)傳輸?shù)暮诵?本文都將從基礎(chǔ)到高級,逐步引導(dǎo)你成為HTTP請求處理的高手,快跟隨小編一起學(xué)習(xí)起來吧
    2024-10-10
  • 關(guān)于python返回值return用法詳解

    關(guān)于python返回值return用法詳解

    這篇文章主要介紹了python中的return關(guān)鍵字,包括其含義、作用、默認返回值、不同整數(shù)值的含義、返回值的類型、函數(shù)作為參數(shù)傳遞以及在類方法中的特殊情況,需要的朋友可以參考下
    2024-12-12
  • 使用matplotlib在Python中繪制數(shù)據(jù)的詳細教程

    使用matplotlib在Python中繪制數(shù)據(jù)的詳細教程

    Python 在處理數(shù)據(jù)方面非常出色,通常,數(shù)據(jù)集 會包括多個變量和許多實例,這使得很難理解數(shù)據(jù)的情況,數(shù)據(jù)可視化是幫助您識別數(shù)據(jù)模式的一種有用方式,本教程將描述如何使用 matplotlib 在 Python 中繪制數(shù)據(jù),需要的朋友可以參考下
    2024-10-10
  • 實例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請求的用法

    實例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請求的用法

    SocketServer模塊中帶有很多實現(xiàn)服務(wù)器所能夠用到的socket類和操作方法,下面我們就來以實例講解Python中SocketServer模塊處理網(wǎng)絡(luò)請求的用法:
    2016-06-06
  • TensorFlow深度學(xué)習(xí)另一種程序風(fēng)格實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

    TensorFlow深度學(xué)習(xí)另一種程序風(fēng)格實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)

    這篇文章主要介紹了TensorFlow卷積神經(jīng)網(wǎng)絡(luò)的另一種程序風(fēng)格實現(xiàn)方式示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11

最新評論

惠来县| 武汉市| 绥德县| 鄂托克旗| 民勤县| 崇信县| 鞍山市| 商水县| 太谷县| 胶南市| 米易县| 建水县| 秦安县| 民丰县| 精河县| 屏东市| 巩留县| 白银市| 定边县| 旺苍县| 宾阳县| 高台县| 宣威市| 北海市| 宜丰县| 长岭县| 峨山| 周至县| 弥勒县| 通许县| 镇远县| 增城市| 富顺县| 阜阳市| 济南市| 乌什县| 新宁县| 城口县| 正镶白旗| 印江| 延津县|