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

從基礎(chǔ)到高級技巧詳解Python openpyxl設(shè)置Excel邊框的完全指南

 更新時間:2025年12月22日 08:42:54   作者:小莊-Python辦公  
在使用 Python 進行 Excel 自動化處理時,openpyxl 是最流行的庫之一,本文將詳細介紹如何使用 openpyxl 設(shè)置單元格邊框,從最基礎(chǔ)的用法到高級封裝技巧,助你制作出專業(yè)的 Excel 報表

在使用 Python 進行 Excel 自動化處理時,openpyxl 是最流行的庫之一。除了寫入數(shù)據(jù),美化表格也是非常重要的一環(huán)。本文將詳細介紹如何使用 openpyxl 設(shè)置單元格邊框,從最基礎(chǔ)的用法到高級封裝技巧,助你制作出專業(yè)的 Excel 報表。

一、基礎(chǔ)邊框設(shè)置

1.1 基本概念

openpyxl 中,邊框設(shè)置主要涉及到兩個類,都在 openpyxl.styles 模塊下:

  • Side: 定義邊框的某“一邊”的樣式(如粗細、顏色)。
  • Border: 由上下左右(以及對角線)的 Side 對象組合而成,最終賦值給單元格的 border 屬性。

簡而言之,你需要先定義好“邊”(Side),然后把這些“邊”拼裝成一個“框”(Border)。

1.2 基本實現(xiàn)代碼

下面是一個最簡單的示例,給單元格 A1 設(shè)置一個黑色的細邊框。

from openpyxl import Workbook
from openpyxl.styles import Border, Side

# 創(chuàng)建工作簿和工作表
wb = Workbook()
ws = wb.active

# 1. 定義"邊" (Side)
# style='thin' 表示細邊框, color='000000' 表示黑色
thin_side = Side(border_style="thin", color="000000")

# 2. 定義"框" (Border)
# 將上下左右都設(shè)置為上面定義的樣式
my_border = Border(left=thin_side, 
                   right=thin_side, 
                   top=thin_side, 
                   bottom=thin_side)

# 3. 應(yīng)用到單元格
ws['A1'].value = "Hello Border"
ws['A1'].border = my_border

# 保存文件
wb.save("border_demo.xlsx")

二、邊框樣式詳解

2.1 所有可用邊框樣式

openpyxl 支持多種邊框樣式(即 border_style 參數(shù))。以下是完整的樣式列表,按視覺效果分類:

無邊框: None

細線類:

  • 'hair': 最細的虛點線(通常用于視覺輔助)
  • 'thin': 標(biāo)準(zhǔn)細實線(最常用)
  • 'dotted': 點狀線
  • 'dashed': 虛線
  • 'dashDot': 點劃線
  • 'dashDotDot': 雙點劃線

中粗類:

  • 'medium': 中等粗細實線
  • 'mediumDashed': 中粗虛線
  • 'mediumDashDot': 中粗點劃線
  • 'mediumDashDotDot': 中粗雙點劃線
  • 'slantDashDot': 傾斜點劃線

粗線類:'thick': 粗實線(常用于表頭或外邊框)

雙線類:'double': 雙實線

2.2 顏色表示方法

color 參數(shù)通常接受 RGBARGB 十六進制字符串。

  • RGB 十六進制: 例如 "FF0000" (紅色)。
  • ARGB 十六進制: 包含透明度(Alpha通道),例如 "FFFF0000"。但在 Excel 中 Alpha 通道通常被忽略,或者 00 代表全透明。通常建議直接使用 RGB 格式。
  • 顏色對象: 也可以使用 openpyxl.styles.Color 對象,但直接用字符串最方便。

常用顏色代碼表:

  • 黑色: "000000"
  • 白色: "FFFFFF"
  • 紅色: "FF0000"
  • 綠色: "00FF00"
  • 藍色: "0000FF"
  • 黃色: "FFFF00"

三、實用邊框設(shè)置技巧

3.1 創(chuàng)建加粗紅色邊框

from openpyxl.styles import Border, Side

# 定義粗紅邊
thick_red_side = Side(border_style="thick", color="FF0000")
red_border = Border(left=thick_red_side, 
                    right=thick_red_side, 
                    top=thick_red_side, 
                    bottom=thick_red_side)

ws['B2'].border = red_border

3.2 不同邊設(shè)置不同樣式

你可以為上下左右設(shè)置完全不同的樣式。例如,底部加粗用于強調(diào)合計行,其余用細線。

# 頂部和左右是細線,底部是粗線
thin_side = Side(border_style="thin", color="000000")
thick_side = Side(border_style="thick", color="000000")

mixed_border = Border(left=thin_side, 
                      right=thin_side, 
                      top=thin_side, 
                      bottom=thick_side) # 底部不同

ws['C3'].border = mixed_border

3.3 為區(qū)域設(shè)置邊框

openpyxl 的樣式必須逐個單元格應(yīng)用,不能直接賦值給一個 Range 對象。我們需要編寫循環(huán)來實現(xiàn)。

def set_border_for_range(ws, cell_range, border_style):
    """
    為指定區(qū)域設(shè)置邊框
    :param ws: Worksheet對象
    :param cell_range: 單元格區(qū)域字符串,如 "A1:D5"
    :param border_style: Border對象
    """
    rows = ws[cell_range]
    for row in rows:
        for cell in row:
            cell.border = border_style

# 使用示例
my_border = Border(left=Side(style='thin'), 
                   right=Side(style='thin'), 
                   top=Side(style='thin'), 
                   bottom=Side(style='thin'))

set_border_for_range(ws, "A5:E10", my_border)

四、高級邊框技巧

4.1 創(chuàng)建視覺上更粗的邊框

當(dāng) 'thick' 樣式仍然不夠醒目,或者你想制作類似“會計底雙線”的效果時,可以利用 double (雙線) 樣式。雖然它不是實心的“更粗”,但在打印和視覺上具有很強的強調(diào)作用,常用于總計行。

另外,通過結(jié)合 背景填充 (Fill) 和邊框,可以增加視覺上的邊界感。

double_side = Side(border_style="double", color="000000")
total_border = Border(top=Side(style='thin'), bottom=double_side)
ws['D12'].border = total_border  # 典型的會計合計樣式

4.2 邊框工廠函數(shù)

為了避免重復(fù)創(chuàng)建 Side 對象,我們可以封裝一個工廠函數(shù)來快速生成 Border 對象。

def border_factory(style='thin', color='000000', sides='all'):
    """
    快速生成Border對象
    :param sides: 'all', 'top_bottom', 'left_right', 或自定義列表 ['top', 'left']
    """
    side = Side(border_style=style, color=color)
    
    kwargs = {}
    if sides == 'all':
        target_sides = ['left', 'right', 'top', 'bottom']
    elif sides == 'top_bottom':
        target_sides = ['top', 'bottom']
    elif sides == 'left_right':
        target_sides = ['left', 'right']
    else:
        target_sides = sides
        
    for s in target_sides:
        kwargs[s] = side
        
    return Border(**kwargs)

# 使用
ws['A1'].border = border_factory(style='medium', color='0000FF')

4.3 條件邊框設(shè)置

結(jié)合業(yè)務(wù)邏輯動態(tài)設(shè)置邊框。例如,給成績不及格的分?jǐn)?shù)加紅框。

data = [85, 92, 58, 77, 45]
red_box = border_factory(style='medium', color='FF0000')

for i, score in enumerate(data, start=1):
    cell = ws.cell(row=i, column=1, value=score)
    if score < 60:
        cell.border = red_box

五、性能優(yōu)化建議

5.1 批量設(shè)置邊框

在處理大量數(shù)據(jù)(如幾萬行)時,頻繁創(chuàng)建 SideBorder 對象會消耗內(nèi)存和時間。

優(yōu)化方案:在循環(huán)外部創(chuàng)建好 Border 對象,然后在循環(huán)內(nèi)部重復(fù)引用同一個對象。

# ? 推薦做法:只創(chuàng)建一個對象
common_border = Border(left=Side(style='thin'), right=Side(style='thin'), ...)

for row in ws.iter_rows(min_row=1, max_row=10000):
    for cell in row:
        cell.border = common_border

# ? 不推薦做法:每次循環(huán)都創(chuàng)建新對象
for row in ws.iter_rows(...):
    for cell in row:
        # 這樣會創(chuàng)建數(shù)萬個Side和Border實例,極其浪費
        cell.border = Border(left=Side(style='thin')...)

5.2 內(nèi)存優(yōu)化

openpyxl 的樣式是共享的(Flyweight 模式)。當(dāng)你把同一個 common_border 對象賦值給多個單元格時,openpyxl 內(nèi)部實際上會優(yōu)化存儲。只要你遵循 5.1 中的“一次定義,多次使用”原則,內(nèi)存通常不是問題。

六、常見問題與解決方案

6.1 邊框不顯示問題

  • 原因 1:顏色設(shè)置為白色或透明。
  • 原因 2:被相鄰單元格的邊框覆蓋。Excel 中相鄰單元格的邊框存在優(yōu)先級(通常右側(cè)覆蓋左側(cè),下方覆蓋上方),或者后設(shè)置的覆蓋先設(shè)置的。
  • 原因 3:網(wǎng)格線干擾。在 Excel 視圖中取消勾選“網(wǎng)格線”查看實際效果。

6.2 邊框粗細問題

  • 問題: mediumthick 看起來區(qū)別不大?
  • 解決: 這取決于 Excel 的縮放比例。thick 是 Excel 支持的最粗實線。如果需要更強的分割感,建議配合單元格背景色填充,或者在該行上方/下方留出一個空行并填充顏色。

七、實用示例:創(chuàng)建專業(yè)的數(shù)據(jù)表格邊框

最后,我們通過一個完整的例子,為一個數(shù)據(jù)表添加專業(yè)邊框:

  • 表頭: 粗外框,背景色,內(nèi)部細線。
  • 數(shù)據(jù): 細邊框。
  • 外圍: 整個表格有一個粗邊框包裹。
from openpyxl import Workbook
from openpyxl.styles import Border, Side, PatternFill, Font

def set_outer_border(ws, cell_range, style='thick'):
    """給整個區(qū)域的外圍畫框,內(nèi)部不畫"""
    rows = list(ws[cell_range])
    side = Side(border_style=style)
    
    # 第一行設(shè)上邊框,最后一行設(shè)下邊框
    for cell in rows[0]:
        cell.border = cell.border + Border(top=side)
    for cell in rows[-1]:
        cell.border = cell.border + Border(bottom=side)
        
    # 第一列設(shè)左邊框,最后一列設(shè)右邊框
    for row in rows:
        row[0].border = row[0].border + Border(left=side)
        row[-1].border = row[-1].border + Border(right=side)

wb = Workbook()
ws = wb.active

# 模擬數(shù)據(jù)
data = [
    ["姓名", "部門", "銷售額"],
    ["張三", "銷售一部", 5000],
    ["李四", "銷售二部", 7000],
    ["王五", "銷售一部", 6200],
]

# 寫入數(shù)據(jù)
for row in data:
    ws.append(row)

# 1. 基礎(chǔ)全細邊框
thin_border = Border(left=Side(style='thin'), 
                     right=Side(style='thin'), 
                     top=Side(style='thin'), 
                     bottom=Side(style='thin'))

for row in ws.iter_rows(min_row=1, max_row=4, min_col=1, max_col=3):
    for cell in row:
        cell.border = thin_border

# 2. 表頭美化(底色 + 粗底邊)
header_fill = PatternFill(start_color="DDDDDD", end_color="DDDDDD", fill_type="solid")
header_bottom_border = Border(left=Side(style='thin'), 
                              right=Side(style='thin'), 
                              top=Side(style='thin'), 
                              bottom=Side(style='thick')) # 表頭下邊緣加粗

for cell in ws[1]:
    cell.fill = header_fill
    cell.font = Font(bold=True)
    # 注意:直接賦值會覆蓋上面的全細邊框,所以這里重新定義了完整的Border
    cell.border = header_bottom_border

# 3. 給整個表格加一個粗外框
set_outer_border(ws, "A1:C4", style="thick")

wb.save("professional_table.xlsx")

八、總結(jié)

openpyxl 提供了強大而靈活的邊框設(shè)置功能,掌握這些技巧可以讓你:

  • 創(chuàng)建美觀的 Excel 報表:通過合適的邊框樣式提升數(shù)據(jù)可讀性。
  • 突出重點數(shù)據(jù):使用不同粗細和顏色的邊框引導(dǎo)視線。
  • 提高工作效率:通過批量設(shè)置和模板函數(shù)減少重復(fù)代碼。
  • 保持代碼可維護性:良好的封裝使邊框設(shè)置邏輯清晰。

記住,邊框不僅是裝飾,更是數(shù)據(jù)可視化的重要組成部分。合理使用邊框可以讓你的 Excel 報表更加專業(yè)和易于理解。

到此這篇關(guān)于從基礎(chǔ)到高級技巧詳解Python openpyxl設(shè)置Excel邊框的完全指南的文章就介紹到這了,更多相關(guān)Python openpyxl設(shè)置Excel邊框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python自動化處理手機驗證碼

    Python自動化處理手機驗證碼

    手機驗證碼是一種常見的身份驗證手段,廣泛應(yīng)用于用戶注冊、登錄、交易確認(rèn)等場景,下面我們來看看如何使用Python自動化處理手機驗證碼吧
    2025-02-02
  • python 批量修改 labelImg 生成的xml文件的方法

    python 批量修改 labelImg 生成的xml文件的方法

    這篇文章主要介紹了python 批量修改 labelImg 生成的xml文件的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽實例代碼

    Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽實例代碼

    在matplotlib中,記號是圖形兩個軸上的小標(biāo)記,到目前為止,我們讓matplotlib處理軸圖例上記號的位置,下面這篇文章主要給大家介紹了關(guān)于Matplotlib控制坐標(biāo)軸刻度間距與標(biāo)簽的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • python flask web服務(wù)實現(xiàn)更換默認(rèn)端口和IP的方法

    python flask web服務(wù)實現(xiàn)更換默認(rèn)端口和IP的方法

    今天小編就為大家分享一篇python flask web服務(wù)實現(xiàn)更換默認(rèn)端口和IP的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python空值填充為無的實現(xiàn)方法

    python空值填充為無的實現(xiàn)方法

    我們經(jīng)常會遇到數(shù)據(jù)集中存在空值的情況,本文主要介紹了python空值填充為無的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Python tkinter模塊中類繼承的三種方式分析

    Python tkinter模塊中類繼承的三種方式分析

    這篇文章主要介紹了Python tkinter模塊中類繼承的三種方式,結(jié)合實例形式分析了三種繼承方式的實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-08-08
  • 一文詳解如何配置Pycharm進行遠程開發(fā)

    一文詳解如何配置Pycharm進行遠程開發(fā)

    在搞深度學(xué)習(xí)的時候,我們在本地開發(fā),但是需要在服務(wù)器去運行工程,所以需要使用Pycharm進行遠程配置,下面這篇文章主要給大家介紹了關(guān)于如何配置Pycharm進行遠程開發(fā)的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • Flask框架debug與配置項的開啟與設(shè)置詳解

    Flask框架debug與配置項的開啟與設(shè)置詳解

    這篇文章主要介紹了Flask框架debug與配置項的開啟與設(shè)置,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 利用python實現(xiàn)可視化大屏

    利用python實現(xiàn)可視化大屏

    這篇文章主要介紹了利用python實現(xiàn)可視化大屏,文章圍繞主題展開對如何利用python實現(xiàn)可視化大屏,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)和工作有所幫助
    2022-03-03
  • python中的None與NULL用法說明

    python中的None與NULL用法說明

    這篇文章主要介紹了python中的None與NULL用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論

蒙阴县| 浪卡子县| 石首市| 博罗县| 阳新县| 建宁县| 拉萨市| 江永县| 西平县| 南城县| 同江市| 太白县| 寿宁县| 长寿区| 赣榆县| 怀安县| 德庆县| 勃利县| 民权县| 曲靖市| 九江县| 越西县| 元氏县| 信宜市| 故城县| 广水市| 永昌县| 闽侯县| 祥云县| 营口市| 南京市| 秦皇岛市| 方正县| 石渠县| 南郑县| 临沭县| 梅州市| 东兰县| 怀来县| 达日县| 武安市|