新聞中心
Python中文社區(qū) (ID:python-china)

創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,先為汾陽(yáng)等服務(wù)建站,汾陽(yáng)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為汾陽(yáng)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
OpenPyXL 使您能夠以多種不同的方式設(shè)置單元格的樣式。樣式化單元格會(huì)讓您的電子表格充滿魅力!這將有助于將它們與其他電子表格區(qū)分開來(lái)。但是請(qǐng)不要過(guò)度使用, 如果每個(gè)單元格都有不同的字體和顏色,您的電子表格就會(huì)看起來(lái)一團(tuán)糟。
您應(yīng)該謹(jǐn)慎使用在本文中學(xué)到的技能。如果您想了解有關(guān) OpenPyXL 支持樣式的更多信息,您可以查看他們的文檔。
https://openpyxl.readthedocs.io/en/stable/styles.html
在本文中,您將了解以下內(nèi)容:
? 設(shè)置字體
? 設(shè)置對(duì)齊方式
? 添加邊框?更改單元格背景顏色
? 將圖像插入單元格?樣式合并單元格
? 使用內(nèi)置樣式
? 創(chuàng)建自定義命名樣式
現(xiàn)在是時(shí)候開始探索如何使用 OpenPyXL 處理字體了!
設(shè)置字體
您可以用字體在計(jì)算機(jī)上設(shè)置文本樣式。字體控制您在屏幕上或打印中看到的文本的大小、粗細(xì)、顏色和樣式。您的計(jì)算機(jī)可以使用數(shù)千種字體。Microsoft 在其 Office 產(chǎn)品中包含了許多字體。
當(dāng)您想使用 OpenPyXL 設(shè)置字體時(shí),您需要從 openpyxl.styles 導(dǎo)入 Font 類。以下演示您將如何進(jìn)行導(dǎo)入:
- from openpyxl.styles import Font
Font 類采用許多參數(shù)。根據(jù) OpenPyXL 的文檔,這是 Font 類的完整參數(shù)列表:
- class openpyxl.styles.fonts.Font(name=None, sz=None, b=None, i=None, charset=None, u=None,
- strike=None, color=None, scheme=None, family=None, size=None, bold=None, italic=None,
- strikethrough=None, underline=None, vertAlign=None, outline=None, shadow=None,
- condense=None, extend=None)
以下列表顯示了您最有可能使用的參數(shù)及其默認(rèn)值:
? name=’Calibri’
? size=11
? bold=False
? italic=False
? vertAlign=None
? underline=’none’?strike=False?color=’FF000000′
這些參數(shù)允許您設(shè)置使文本看起來(lái)漂亮所需的大部分內(nèi)容。請(qǐng)注意,OpenPyXL 中的顏色名稱使用十六進(jìn)制值來(lái)表示 RGB(紅、綠、藍(lán))顏色值。您可以設(shè)置文本是否應(yīng)為粗體、斜體、下劃線或刪除線。
要了解如何在 OpenPyXL 中使用字體,請(qǐng)創(chuàng)建一個(gè)名為 font_sizes.py 的新文件,并向其中添加以下代碼:
- # font_sizes.py
- import openpyxl
- from openpyxl.styles import Font
- def font_demo(path):
- workbook = openpyxl.Workbook()
- sheet = workbook.active
- cell = sheet["A1"]
- cell.font = Font(size=12)
- cell.value = "Hello"
- cell2 = sheet["A2"]
- cell2.font = Font(name="Arial", size=14, color="00FF0000")
- sheet["A2"] = "from"
- cell2 = sheet["A3"]
- cell2.font = Font(name="Tahoma", size=16, color="00339966")
- sheet["A3"] = "OpenPyXL"
- workbook.save(path)
- if __name__ == "__main__":
- font_demo("font_demo.xlsx")
此代碼在三個(gè)不同的單元格中使用了三種不同的字體。在 A1 中,您使用默認(rèn)值,即 Calibri。然后在 A2 中,將字體大小設(shè)置為 Arial 并將大小增加到 14 磅。最后,在 A3 中,您將字體更改為 Tahoma,將字體大小更改為 16 磅。
對(duì)于第二種和第三種字體,您還可以更改文本顏色。在 A2 中,將顏色設(shè)置為紅色,在 A3 中,將顏色設(shè)置為綠色。
當(dāng)您運(yùn)行此代碼時(shí),您的輸出將如下所示:
嘗試更改代碼以使用其他字體或顏色。如果你想冒險(xiǎn),你應(yīng)該嘗試將你的文字加粗或斜體。
現(xiàn)在您已準(zhǔn)備好學(xué)習(xí)文本對(duì)齊。
設(shè)置對(duì)齊
您可以使用 openpyxl.styles.Alignment 在 OpenPyXL 中設(shè)置對(duì)齊方式。您可以使用此類來(lái)旋轉(zhuǎn)文本、設(shè)置文本換行和縮進(jìn)。
以下是 Alignment類使用的默認(rèn)值:
? horizontal=’general’
? vertical=’bottom’?text_rotation=0
? wrap_text=False
? shrink_to_fit=False
? indent=0
打開 Python 編輯器并創(chuàng)建一個(gè)名為 alignment.py 的新文件。然后在其中添加以下代碼:
- # alignment.py
- from openpyxl import Workbook
- from openpyxl.styles import Alignment
- def center_text(path, horizontal="center", vertical="center"):
- workbook = Workbook()
- sheet = workbook.active
- sheet["A1"] = "Hello"
- sheet["A1"].alignment = Alignment(horizontalhorizontal=horizontal,
- verticalvertical=vertical)
- sheet["A2"] = "from"
- sheet["A3"] = "OpenPyXL"
- sheet["A3"].alignment = Alignment(text_rotation=90)
- workbook.save(path)
- if __name__ == "__main__":
- center_text("alignment.xlsx")
運(yùn)行此代碼時(shí),您將在 A1 中水平和垂直居中字符串。然后使用 A2 的默認(rèn)值。最后,對(duì)于 A3,將文本旋轉(zhuǎn) 90 度。
嘗試運(yùn)行此代碼,您將看到如下內(nèi)容:
最好花時(shí)間嘗試不同的 text_rotation 值。然后嘗試使用不同的值更改水平和垂直參數(shù)。很快,您就可以像專業(yè)人士一樣對(duì)齊文本了!
現(xiàn)在您已準(zhǔn)備好了解如何為單元格添加邊框!
添加邊框
OpenPyXL 使您能夠設(shè)置單元格邊框的樣式。您可以為單元格的四個(gè)邊中的每一個(gè)指定不同的邊框樣式。
您可以使用以下任何一種邊框樣式:
?‘ dashDot’
?‘ dashDotDot’
?‘ dashed’?‘dotted’
?‘ double’?‘hair’?‘medium’
?‘ mediumDashDot’
?‘ mediumDashDotDot’,
?‘ mediumDashed’
?‘ slantDashDot’?‘thick’
?‘ thin’
打開 Python 編輯器并創(chuàng)建一個(gè)名為 border.py 的新文件。然后在您的文件中輸入以下代碼:
- # border.py
- from openpyxl import Workbook
- from openpyxl.styles import Border, Side
- def border(path):
- pink = "00FF00FF"
- green = "00008000"
- thin = Side(border_style="thin", color=pink)
- double = Side(border_style="double", color=green)
- workbook = Workbook()
- sheet = workbook.active
- sheet["A1"] = "Hello"
- sheet["A1"].border = Border(top=double, left=thin, right=thin, bottom=double)
- sheet["A2"] = "from"
- sheet["A3"] = "OpenPyXL"
- sheet["A3"].border = Border(top=thin, left=double, right=double, bottom=thin)
- workbook.save(path)
- if __name__ == "__main__":
- border("border.xlsx")
此代碼將為單元格 A1 和 A3 添加邊框。A1的頂部和底部使用“雙”邊框樣式并為綠色,而單元格側(cè)面使用“細(xì)”邊框樣式并為粉紅色。
單元格 A3 使用相同的邊框,但交換了它們,現(xiàn)在邊為綠色,頂部和底部為粉紅色。
您可以通過(guò)在 border_style 和要使用的顏色中創(chuàng)建 Side 對(duì)象來(lái)獲得此效果。然后將這些 Side 對(duì)象傳遞給 Border 類,該類允許您單獨(dú)設(shè)置單元格的四個(gè)邊中的每一個(gè)。要將邊框應(yīng)用于單元格,您必須設(shè)置單元格的邊框?qū)傩浴?/p>
運(yùn)行此代碼時(shí),您將看到以下結(jié)果:
此圖像被放大了很多,以便您可以輕松看到單元格的邊框。如果您嘗試使用本節(jié)開頭提到的其他一些邊框樣式來(lái)修改此代碼,您可以了解您還可以做什么。
更改單元格背景顏色
您可以通過(guò)更改背景顏色來(lái)突出顯示一個(gè)單元格或一系列單元格。在大多數(shù)情況下,突出顯示單元格比更改文本的字體或顏色更引人注目。OpenPyXL 為您提供了一個(gè)名為 PatternFill 的類,您可以使用它來(lái)更改單元格的背景顏色。
PatternFill 類接受以下參數(shù)(默認(rèn)值包括在下面):
? patternType=None
? fgColor=Color()
? bgColor=Color()
? fill_type=None
? start_color=None
? end_color=None
您可以使用多種不同的填充類型。以下是當(dāng)前支持的填充類型列表:
?‘none’
?‘solid’
?‘darkDown’
?‘darkGray’
?‘darkGrid’
?‘darkHorizontal’
?‘darkTrellis’
?‘darkUp’
?‘darkVertical’
? ‘gray0625’
? ‘gray125’
? ‘lightDown’
? ‘lightGray’
? ‘lightGrid’
? ‘lightHorizontal’
? ‘lightTrellis’
? ‘lightUp’
? ‘lightVertical’?‘mediumGray’
現(xiàn)在您有足夠的信息來(lái)嘗試使用 OpenPyXL 設(shè)置單元格的背景顏色。在 Python 編輯器中打開一個(gè)新文件并將其命名為 background_colors.py。然后將此代碼添加到您的新文件中:
- # background_colors.py
- from openpyxl import Workbook
- from openpyxl.styles import PatternFill
- def background_colors(path):
- workbook = Workbook()
- sheet = workbook.active
- yellow = "00FFFF00"
- for rows in sheet.iter_rows(min_row=1, max_row=10, min_col=1, max_col=12):
- for cell in rows:
- if cell.row % 2:
- cell.fill = PatternFill(start_color=yellow, end_color=yellow,
- fill_type = "solid")
- workbook.save(path)
- if __name__ == "__main__":
- background_colors("bg.xlsx")
此示例將迭代 9 行 12 列。如果該單元格在奇數(shù)行中,它會(huì)將每個(gè)單元格的背景顏色設(shè)置為黃色。背景顏色發(fā)生變化的單元格將從 A 列到 L 列。
當(dāng)您想設(shè)置單元格的背景顏色時(shí),您可以將單元格的填充屬性設(shè)置為 PatternFill 的實(shí)例。在此示例中,您指定 start_color 和 end_color。您還將 fill_type 設(shè)置為“solid”。OpenPyXL 還支持使用 GradientFill 作為背景。
嘗試運(yùn)行此代碼。運(yùn)行后,您將擁有一個(gè)新的 Excel 文檔,如下所示:
以下是您可以使用此代碼嘗試的一些想法:
? 更改受影響的行數(shù)或列數(shù)
? 更改您要更改的顏色
? 更新代碼以使用不同顏色為偶數(shù)行著色
? 嘗試其他填充類型
完成對(duì)背景顏色的試驗(yàn)后,您可以了解如何在單元格中插入圖像!
將圖像插入單元格
OpenPyXL 使圖像插入 Excel 電子表格變得簡(jiǎn)單。為了實(shí)現(xiàn)這個(gè)魔法,您可以使用 Worksheet 對(duì)象的 add_image() 方法。該方法接受兩個(gè)參數(shù):
img – 您要插入的圖像文件的路徑 anchor – 提供一個(gè)單元格作為圖像的左上角錨點(diǎn)(可選)
對(duì)于此示例,您將使用Mouse vs. Python圖片:
本書的 GitHub 存儲(chǔ)庫(kù)中有可供您使用的圖像。
下載圖像后,創(chuàng)建一個(gè)新的 Python 文件并將其命名為 insert_image.py。然后添加以下內(nèi)容:
- # insert_image.py
- from openpyxl import Workbook
- from openpyxl.drawing.image import Image
- def insert_image(path, image_path):
- workbook = Workbook()
- sheet = workbook.active
- img = Image("logo.png")
- sheet.add_image(img, "B1")
- workbook.save(path)
- if __name__ == "__main__":
- insert_image("logo.xlsx", "logo.png")
在這里,您傳入要插入的圖像的路徑。要插入圖像,請(qǐng)調(diào)用 add_image()。在此示例中,您正在硬編碼以使用單元格 B1 作為錨定單元格。然后保存 Excel 電子表格。
如果你打開你的電子表格,你會(huì)看到它看起來(lái)像這樣:
您可能不需要經(jīng)常在 Excel 電子表格中插入圖像,但這是一項(xiàng)極好的技能。
樣式合并單元格
合并單元格是將兩個(gè)或多個(gè)相鄰單元格合并為一個(gè)單元格。如果要使用 OpenPyXL 設(shè)置合并單元格的值,則必須使用合并單元格的最左上角的單元格。
您還必須使用此特定單元格為整個(gè)合并單元格設(shè)置樣式。您可以將在單個(gè)單元格上使用的所有樣式和字體設(shè)置與合并單元格一起使用。但是,您必須將樣式應(yīng)用于左上角的單元格,才能將其應(yīng)用于整個(gè)合并單元格。
如果您看到一些代碼,您就會(huì)明白這是如何工作的。繼續(xù)創(chuàng)建一個(gè)名為 style_merged_cell.py 的新文件?,F(xiàn)在在您的文件中輸入以下代碼:
- # style_merged_cell.py
- from openpyxl import Workbook
- from openpyxl.styles import Font, Border, Side, GradientFill, Alignment
- def merge_style(path):
- workbook = Workbook()
- sheet = workbook.active
- sheet.merge_cells("A2:G4")
- top_left_cell = sheet["A2"]
- light_purple = "00CC99FF"
- green = "00008000"
- thin = Side(border_style="thin", color=light_purple)
- double = Side(border_style="double", color=green)
- top_left_cell.value = "Hello from PyOpenXL"
- top_left_cell.border = Border(top=double, left=thin, right=thin,
- bottom=double)
- top_left_cell.fill = GradientFill(stop=("000000", "FFFFFF"))
- top_left_cell.font = Font(b=True, color="FF0000", size=16)
- top_left_cell.alignment = Alignment(horizontal="center",
- vertical="center")
- workbook.save(path)
- if __name__ == "__main__":
- merge_style("merged_style.xlsx")
在這里,您創(chuàng)建一個(gè)從 A2(左上角的單元格)開始到 G4 的合并單元格。然后設(shè)置單元格的值、邊框、填充、字體和對(duì)齊方式。
當(dāng)您運(yùn)行此代碼時(shí),您的新電子表格將如下所示:
您應(yīng)該花一些時(shí)間在合并的單元格上嘗試一些不同的樣式。例如,也許會(huì)想出比這里使用的灰色更好的漸變。
現(xiàn)在您已準(zhǔn)備好了解 OpenPyXL 的內(nèi)置樣式!
使用內(nèi)置樣式
OpenPyXL 帶有多種內(nèi)置樣式,您也可以使用。與其在本書中復(fù)制完整的內(nèi)置樣式列表,不如查看官方文檔,因?yàn)樗鼘⑹菢邮矫Q的最新來(lái)源。
但是,值得注意的是其中一些樣式。例如,以下是您可以使用的數(shù)字格式樣式:
? ‘Comma’
? ‘Comma [0]’
? ‘Currency’
? ‘Currency [0]’?‘Percent’
您還可以應(yīng)用文本樣式。以下是這些樣式的列表:
? ‘Title’
? ‘Headline 1’
? ‘Headline 2’
? ‘Headline 3’
? ‘Headline 4’
? ‘Hyperlink’
? ‘Followed Hyperlink’
? ‘Linked Cell’
OpenPyXL 有幾個(gè)其他的內(nèi)置樣式組。您應(yīng)該查看文檔以了解支持的所有不同樣式。
現(xiàn)在您了解了一些可以使用的內(nèi)置樣式,是時(shí)候編寫一些代碼了!創(chuàng)建一個(gè)新文件并將其命名為 builtin_styls.py。然后輸入以下代碼:
- # builtin_styles.py
- from openpyxl import Workbook
- def builtin_styles(path):
- workbook = Workbook()
- sheet = workbook.active
- sheet["A1"].value = "Hello"
- sheet["A1"].style = "Title"
- sheet["A2"].value = "from"
- sheet["A2"].style = "Headline 1"
- sheet["A3"].value = "OpenPyXL"
- sheet["A3"].style = "Headline 2"
- workbook.save(path)
- if __name__ == "__main__":
- builtin_styles("builtin_styles.xlsx")
在這里,您將三種不同的樣式應(yīng)用于三個(gè)不同的單元格。您可以使用“Title”,“Headline 1”和 “Headline 2”。
當(dāng)您運(yùn)行此代碼時(shí),您最終將擁有一個(gè)如下所示的電子表格:
與往常一樣,您應(yīng)該嘗試其他一些內(nèi)置樣式。嘗試它們是確定它們做什么以及它們是否適合您的唯一方法。
如果你想創(chuàng)造你的風(fēng)格怎么辦?這就是您將在下一節(jié)中介紹的內(nèi)容!
創(chuàng)建自定義命名樣式
您也可以使用 OpenPyXL 創(chuàng)建設(shè)計(jì)的自定義樣式。要?jiǎng)?chuàng)建您的樣式,您必須使用 NamedStyle 類。
NamedStyle 類采用以下參數(shù)(也包括默認(rèn)值):
? name=”Normal”
? font=Font()
? fill=PatternFill()
? border=Border()
? alignment=Alignment()
? number_format=None
? protection=Protection()
? builtinId=None
? hidden=False
? xfId=None
您應(yīng)該始終為您的 NamedStyle 提供您自己的名稱以保持其唯一性。繼續(xù)創(chuàng)建一個(gè)新文件并將其命名為named_style.py。然后在其中添加以下代碼:
- # named_style.py
- from openpyxl import Workbook
- from openpyxl.styles import Font, Border, Side, NamedStyle
- def named_style(path):
- workbook = Workbook()
- sheet = workbook.active
- red = "00FF0000"
- font = Font(bold=True, size=22)
- thick = Side(style="thick", color=red)
- border = Border(left=thick, right=thick, top=thick, bottom=thick)
- named_style = NamedStyle(name="highlight", fontfont=font, borderborder=border)
- sheet["A1"].value = "Hello"
- sheet["A1"].style = named_style
- sheet["A2"].value = "from"
- sheet["A3"].value = "OpenPyXL"
- workbook.save(path)
- if __name__ == "__main__":
- named_style("named_style.xlsx")
在這里,您創(chuàng)建了一個(gè) Font()、Side() 和 Border() 實(shí)例以傳遞給您的 NamedStyle()。創(chuàng)建自定義樣式后,您可以通過(guò)設(shè)置單元格的樣式屬性將其應(yīng)用于單元格。應(yīng)用自定義樣式的方式與應(yīng)用內(nèi)置樣式的方式相同!
您將自定義樣式應(yīng)用到單元格 A1。
當(dāng)您運(yùn)行此代碼時(shí),您將獲得一個(gè)如下所示的電子表格:
現(xiàn)在輪到你了!編輯代碼以使用 Side 樣式,這將更改您的邊框?;蛘邉?chuàng)建多個(gè) Side 實(shí)例,以便您可以使單元格的每一側(cè)都是唯一的。使用不同的字體或添加自定義背景顏色!
總結(jié)
您可以使用 OpenPyXL 對(duì)單元格做很多不同的事情。本文中的信息使您能夠以優(yōu)美的方式格式化數(shù)據(jù)。
在本文中,您了解了以下主題:
? 使用字體
? 設(shè)置對(duì)齊方式
? 添加邊框
? 更改單元格背景顏色
? 將圖像插入單元格
? 樣式合并單元格
? 使用內(nèi)置樣式
? 創(chuàng)建自定義命名樣式
您可以利用在本文中學(xué)到的內(nèi)容制作精美的電子表格。您可以通過(guò)更改單元格的背景顏色或字體來(lái)突出特定的數(shù)據(jù)。您還可以使用內(nèi)置樣式更改單元格的格式。OpenPyXL 在處理單元格時(shí)非常強(qiáng)大和有價(jià)值。
網(wǎng)頁(yè)名稱:完全解讀OpenPyXL設(shè)置Excel單元格樣式
網(wǎng)頁(yè)URL:http://www.dlmjj.cn/article/dhdcgsc.html


咨詢
建站咨詢
