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

Python使用openpyxl生成、讀取、修改Excel

 更新時(shí)間:2026年05月09日 09:47:09   作者:yuanpan  
本文介紹了使用Python的openpyxl庫(kù)處理Excel文件的方法,包括生成、讀取和修改Excel文件,適用于辦公自動(dòng)化場(chǎng)景,文中提供了完整代碼示例,并強(qiáng)調(diào)了從簡(jiǎn)單到復(fù)雜逐步學(xué)習(xí)的重要性,需要的朋友可以參考下

很多日常辦公場(chǎng)景都會(huì)遇到 Excel:整理銷售數(shù)據(jù)、統(tǒng)計(jì)考勤、合并表格、批量改格式、給領(lǐng)導(dǎo)生成周報(bào)。如果每次都靠手動(dòng)復(fù)制、篩選、改顏色,效率會(huì)很低,也容易出錯(cuò)。

openpyxl 是 Python 里非常常用的 Excel 處理庫(kù),適合操作 .xlsx 文件。本文用一份完整演示代碼,帶大家學(xué)會(huì)三個(gè)高頻動(dòng)作:

  • 生成 Excel 文件
  • 讀取 Excel 內(nèi)容
  • 修改已有 Excel 文件

適合剛開(kāi)始學(xué)習(xí) Python、也想提升 Excel 辦公效率的小伙伴。

一、安裝 openpyxl

先在命令行安裝:

pip install openpyxl

如果你使用的是多個(gè) Python 版本,也可以這樣安裝:

python -m pip install openpyxl

二、完整演示代碼

下面這段代碼會(huì)完成一個(gè)完整流程:

  1. 生成一份 student_score.xlsx
  2. 寫入學(xué)生成績(jī)數(shù)據(jù)
  3. 設(shè)置標(biāo)題、表頭、列寬、顏色、凍結(jié)窗格
  4. 讀取 Excel 并打印每一行
  5. 修改 Excel:新增平均分、等級(jí)、備注,并保存為新文件

建議新建一個(gè) openpyxl_excel_demo.py 文件,把代碼復(fù)制進(jìn)去直接運(yùn)行。

from pathlib import Path

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


BASE_DIR = Path(__file__).resolve().parent
SOURCE_FILE = BASE_DIR / "student_score.xlsx"
UPDATED_FILE = BASE_DIR / "student_score_updated.xlsx"


def create_excel(file_path: Path) -> None:
    """生成一份學(xué)生成績(jī) Excel。"""
    wb = Workbook()
    ws = wb.active
    ws.title = "成績(jī)表"

    # 標(biāo)題
    ws.merge_cells("A1:F1")
    ws["A1"] = "學(xué)生成績(jī)統(tǒng)計(jì)表"
    ws["A1"].font = Font(name="微軟雅黑", size=16, bold=True, color="FFFFFF")
    ws["A1"].fill = PatternFill("solid", fgColor="4472C4")
    ws["A1"].alignment = Alignment(horizontal="center", vertical="center")
    ws.row_dimensions[1].height = 28

    # 表頭和數(shù)據(jù)
    headers = ["學(xué)號(hào)", "姓名", "語(yǔ)文", "數(shù)學(xué)", "英語(yǔ)", "班級(jí)"]
    rows = [
        [1001, "張三", 88, 92, 85, "一班"],
        [1002, "李四", 76, 81, 79, "一班"],
        [1003, "王五", 95, 89, 93, "二班"],
        [1004, "趙六", 68, 72, 70, "二班"],
        [1005, "孫七", 84, 86, 91, "三班"],
    ]

    ws.append([])
    ws.append(headers)
    for row in rows:
        ws.append(row)

    # 樣式
    header_fill = PatternFill("solid", fgColor="D9EAF7")
    thin = Side(style="thin", color="D9D9D9")
    border = Border(left=thin, right=thin, top=thin, bottom=thin)

    for row in ws.iter_rows(min_row=3, max_row=ws.max_row, min_col=1, max_col=6):
        for cell in row:
            cell.border = border
            cell.alignment = Alignment(horizontal="center", vertical="center")

    for cell in ws[3]:
        cell.font = Font(bold=True)
        cell.fill = header_fill

    # 設(shè)置列寬
    column_widths = [12, 12, 10, 10, 10, 12]
    for index, width in enumerate(column_widths, start=1):
        ws.column_dimensions[get_column_letter(index)].width = width

    # 凍結(jié)表頭,開(kāi)啟篩選
    ws.freeze_panes = "A4"
    ws.auto_filter.ref = f"A3:F{ws.max_row}"

    wb.save(file_path)
    print(f"已生成 Excel:{file_path}")


def read_excel(file_path: Path) -> None:
    """讀取 Excel 內(nèi)容并打印。"""
    wb = load_workbook(file_path)
    ws = wb["成績(jī)表"]

    print("\n讀取 Excel 內(nèi)容:")
    for row in ws.iter_rows(min_row=4, values_only=True):
        student_id, name, chinese, math, english, class_name = row
        print(
            f"學(xué)號(hào):{student_id},姓名:{name},"
            f"語(yǔ)文:{chinese},數(shù)學(xué):{math},英語(yǔ):{english},班級(jí):{class_name}"
        )


def update_excel(source_path: Path, target_path: Path) -> None:
    """修改 Excel,增加平均分、等級(jí)、備注。"""
    wb = load_workbook(source_path)
    ws = wb["成績(jī)表"]

    # 新增表頭
    ws["G3"] = "平均分"
    ws["H3"] = "等級(jí)"
    ws["I3"] = "備注"

    for cell in ws[3]:
        cell.font = Font(bold=True)
        cell.fill = PatternFill("solid", fgColor="D9EAF7")
        cell.alignment = Alignment(horizontal="center", vertical="center")

    for row_index in range(4, ws.max_row + 1):
        chinese = ws.cell(row=row_index, column=3).value
        math = ws.cell(row=row_index, column=4).value
        english = ws.cell(row=row_index, column=5).value

        average = round((chinese + math + english) / 3, 2)
        ws.cell(row=row_index, column=7).value = average

        if average >= 90:
            level = "優(yōu)秀"
            remark = "繼續(xù)保持"
        elif average >= 80:
            level = "良好"
            remark = "表現(xiàn)穩(wěn)定"
        elif average >= 70:
            level = "合格"
            remark = "仍有提升空間"
        else:
            level = "待提升"
            remark = "建議重點(diǎn)輔導(dǎo)"

        ws.cell(row=row_index, column=8).value = level
        ws.cell(row=row_index, column=9).value = remark

    # 給新增區(qū)域補(bǔ)樣式
    thin = Side(style="thin", color="D9D9D9")
    border = Border(left=thin, right=thin, top=thin, bottom=thin)
    for row in ws.iter_rows(min_row=3, max_row=ws.max_row, min_col=1, max_col=9):
        for cell in row:
            cell.border = border
            cell.alignment = Alignment(horizontal="center", vertical="center")

    for column in range(7, 10):
        ws.column_dimensions[get_column_letter(column)].width = 14

    ws.auto_filter.ref = f"A3:I{ws.max_row}"
    wb.save(target_path)
    print(f"\n已修改并另存為:{target_path}")


def main() -> None:
    create_excel(SOURCE_FILE)
    read_excel(SOURCE_FILE)
    update_excel(SOURCE_FILE, UPDATED_FILE)


if __name__ == "__main__":
    main()

三、代碼運(yùn)行后會(huì)得到什么

運(yùn)行命令:

python openpyxl_excel_demo.py

執(zhí)行完成后,當(dāng)前目錄會(huì)生成兩個(gè)文件:

  • student_score.xlsx:原始學(xué)生成績(jī)表
  • student_score_updated.xlsx:新增平均分、等級(jí)、備注之后的成績(jī)表

控制臺(tái)也會(huì)打印讀取到的數(shù)據(jù),例如:

已生成 Excel:student_score.xlsx

讀取 Excel 內(nèi)容:
學(xué)號(hào):1001,姓名:張三,語(yǔ)文:88,數(shù)學(xué):92,英語(yǔ):85,班級(jí):一班
學(xué)號(hào):1002,姓名:李四,語(yǔ)文:76,數(shù)學(xué):81,英語(yǔ):79,班級(jí):一班

已修改并另存為:student_score_updated.xlsx

四、核心知識(shí)點(diǎn)拆解

1. 創(chuàng)建工作簿

wb = Workbook()
ws = wb.active
ws.title = "成績(jī)表"

Workbook() 表示新建一個(gè) Excel 文件,wb.active 獲取默認(rèn)工作表,ws.title 可以修改工作表名稱。

2. 寫入單元格

ws["A1"] = "學(xué)生成績(jī)統(tǒng)計(jì)表"
ws.append(["學(xué)號(hào)", "姓名", "語(yǔ)文", "數(shù)學(xué)", "英語(yǔ)", "班級(jí)"])

常見(jiàn)寫法有兩種:

  • ws["A1"] = 值:適合寫入指定單元格
  • ws.append([...]):適合按行批量追加數(shù)據(jù)

3. 讀取工作簿

wb = load_workbook("student_score.xlsx")
ws = wb["成績(jī)表"]

讀取已有 Excel 文件時(shí)使用 load_workbook()。如果文件里有多個(gè) sheet,可以通過(guò)名稱獲取對(duì)應(yīng)工作表。

4. 遍歷行數(shù)據(jù)

for row in ws.iter_rows(min_row=4, values_only=True):
    print(row)

iter_rows() 很適合批量讀取表格數(shù)據(jù)。

  • min_row=4 表示從第 4 行開(kāi)始讀
  • values_only=True 表示只讀取單元格的值,不讀取單元格對(duì)象

5. 修改并保存為新文件

wb = load_workbook("student_score.xlsx")
ws = wb["成績(jī)表"]
ws["G3"] = "平均分"
wb.save("student_score_updated.xlsx")

實(shí)際工作中,建議不要直接覆蓋原始文件。可以先讀取源文件,再另存為新文件,這樣出錯(cuò)時(shí)還能保留原始數(shù)據(jù)。

五、openpyxl 適合哪些辦公自動(dòng)化場(chǎng)景

openpyxl 可以幫你處理很多重復(fù)性的 Excel 工作,例如:

  • 批量生成日?qǐng)?bào)、周報(bào)、月報(bào)
  • 批量讀取多個(gè) Excel 文件的數(shù)據(jù)
  • 給 Excel 自動(dòng)加表頭、顏色、邊框、列寬
  • 根據(jù)分?jǐn)?shù)、金額、狀態(tài)自動(dòng)計(jì)算等級(jí)
  • 自動(dòng)篩選異常數(shù)據(jù)
  • 批量修改表格格式
  • 自動(dòng)生成帶公式的統(tǒng)計(jì)表

如果你每天都在重復(fù)打開(kāi) Excel、復(fù)制粘貼、改格式,那么這類腳本很值得學(xué)習(xí)。

六、學(xué)習(xí)建議

剛學(xué) openpyxl 時(shí),不建議一開(kāi)始就追求復(fù)雜功能??梢园聪旅骓樞蚓毩?xí):

  1. 先會(huì)新建 Excel、寫入幾行數(shù)據(jù)
  2. 再學(xué)讀取已有 Excel
  3. 再學(xué)修改單元格內(nèi)容
  4. 然后學(xué)習(xí)樣式、列寬、凍結(jié)窗格、篩選
  5. 最后結(jié)合真實(shí)工作表,把重復(fù)操作寫成腳本

Python 辦公自動(dòng)化的價(jià)值,不在于寫出多復(fù)雜的代碼,而在于把每天重復(fù) 30 分鐘的事情,變成一個(gè) 3 秒鐘執(zhí)行完成的腳本。

七、總結(jié)

本文用一份完整代碼演示了如何用 openpyxl 完成 Excel 的生成、讀取和修改。你可以把這個(gè)腳本當(dāng)成模板,換成自己的業(yè)務(wù)字段,例如員工信息、訂單數(shù)據(jù)、考勤記錄、銷售統(tǒng)計(jì)等。

掌握這些基礎(chǔ)之后,再繼續(xù)學(xué)習(xí)公式、圖表、多文件合并、批量報(bào)表生成,Python 處理 Excel 的效率會(huì)非常明顯。

以上就是Python使用openpyxl生成、讀取、修改Excel的詳細(xì)內(nèi)容,更多關(guān)于Python openpyxl操作Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python時(shí)間管理黑科技之datetime函數(shù)詳解

    Python時(shí)間管理黑科技之datetime函數(shù)詳解

    在Python中,datetime模塊是處理日期和時(shí)間的標(biāo)準(zhǔn)庫(kù),它提供了一系列功能強(qiáng)大的函數(shù)和類,用于處理日期、時(shí)間、時(shí)間間隔等,本文將深入探討datetime模塊的使用方法,感興趣的可以了解下
    2023-08-08
  • Python中的特殊方法以及應(yīng)用詳解

    Python中的特殊方法以及應(yīng)用詳解

    這篇文章主要給大家介紹了關(guān)于Python中特殊方法以及應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python如何基于Tesseract實(shí)現(xiàn)識(shí)別文字功能

    Python如何基于Tesseract實(shí)現(xiàn)識(shí)別文字功能

    這篇文章主要介紹了Python如何基于Tesseract實(shí)現(xiàn)識(shí)別文字功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • django queryset相加和篩選教程

    django queryset相加和篩選教程

    這篇文章主要介紹了django queryset相加和篩選教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • windows安裝python超詳細(xì)圖文教程

    windows安裝python超詳細(xì)圖文教程

    今天帶各位小伙伴學(xué)習(xí)怎么在windows上安裝python,文中有非常詳細(xì)的圖文介紹,對(duì)初步學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Python中用于去除空格的三個(gè)函數(shù)的使用小結(jié)

    Python中用于去除空格的三個(gè)函數(shù)的使用小結(jié)

    這篇文章主要介紹了Python中用于去除空格的三個(gè)函數(shù)的使用小結(jié),對(duì)strip()和lstrip()和rstrip()這三個(gè)函數(shù)做了簡(jiǎn)單的講解,需要的朋友可以參考下
    2015-04-04
  • Python圖片檢索之以圖搜圖

    Python圖片檢索之以圖搜圖

    由于很多論文里面的測(cè)試圖片沒(méi)有標(biāo)號(hào),就不能確定它們是Testset數(shù)據(jù)集中哪幾張圖片.為了能解決這個(gè)問(wèn)題,需要完成以圖片去搜索整個(gè)數(shù)據(jù)集文件目錄的任務(wù).本文有非常詳細(xì)的圖文示例,需要的朋友可以參考下
    2021-05-05
  • Python3字符串的常用操作方法之修改方法與大小寫字母轉(zhuǎn)化

    Python3字符串的常用操作方法之修改方法與大小寫字母轉(zhuǎn)化

    這篇文章主要介紹了Python3字符串的常用操作方法之修改方法與大小寫字母轉(zhuǎn)化,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • pygame實(shí)現(xiàn)雷電游戲雛形開(kāi)發(fā)

    pygame實(shí)現(xiàn)雷電游戲雛形開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)雷電游戲開(kāi)發(fā)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • python進(jìn)階之魔術(shù)方法詳解

    python進(jìn)階之魔術(shù)方法詳解

    這篇文章主要為大家介紹了python進(jìn)階之魔術(shù)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01

最新評(píng)論

靖边县| 射洪县| 奇台县| 马边| 芦山县| 江源县| 贵州省| 涟水县| 长顺县| 肃宁县| 东阳市| 安远县| 阳山县| 洛浦县| 苏州市| 衢州市| 富锦市| 泗阳县| 枞阳县| 浮山县| 扎兰屯市| 鱼台县| 凤翔县| 万山特区| 宜良县| 安徽省| 沙河市| 横山县| 栖霞市| 平湖市| 水城县| 延庆县| 广汉市| 元朗区| 浦北县| 深州市| 仁怀市| 唐山市| 海林市| 尉氏县| 赫章县|