当前位置: 首页 > 科技观察

全面解读OpenPyXL给Excel单元格设置样式

时间:2023-03-13 15:41:23 科技观察

Python中文社区(ID:python-china)样式化的单元格将使您的电子表格迷人!这将有助于将它们与其他电子表格区分开来。但不要过度,如果每个单元格的字体和颜色都不同,您的电子表格会看起来一团糟。您应该谨慎使用本文中学到的技能。如果您想详细了解OpenPyXL支持的样式,可以查看它们的文档。https://openpyxl.readthedocs.io/en/stable/styles.html在本文中,您将了解:?设置字体?设置对齐方式?添加边框?更改单元格背景颜色?将图像插入单元格?设置合并单元格的样式?使用内置样式?创建自定义命名样式现在是时候开始探索如何将OpenPyXL与字体一起使用了!设置字体您可以使用字体来设置计算机上文本的样式。字体控制您在屏幕上或打印出来的文本的大小、粗细、颜色和样式。您的计算机可以使用数千种字体。Microsoft在其Office产品中包含许多字体。当你想用OpenPyXL设置字体时,你需要从openpyxl.styles导入Font类。以下是导入的方式:fromopenpyxl.stylesimportFontFont类有许多参数。根据OpenPyXL文档,这里是Font类的完整参数列表:classopenpyxl.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)以下列表显示了您最有可能使用的参数及其默认值:?name='Calibri'?size=11?bold=False?italic=False?vertAlign=None?underline='none'?strike=False?color='FF000000'这些参数允许您设置使文本看起来漂亮所需的大部分内容。请注意,OpenPyXL中的颜色名称使用十六进制值来表示RGB(红、绿、蓝)颜色值。您可以设置文本是否应为粗体、斜体、下划线或删除线。要了解如何在OpenPyXL中使用字体,请创建一个名为font_sizes.py的新文件并向其中添加以下代码:#font_sizes.pyimportopenpyxlfromopenpyxl.stylesimportFontdeffont_demo(path):workbook=openpyxl.Workbook()sheet=workbook.activecell=sheet["A1"]cell.font=Font(size=12)cell.value="Hello"cell2=sheet["A2"]cell2.font=Font(name="宋体",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")此代码在三个不同的单元格中使用三种不同的字体。在A1中,您使用默认值,即Calibri。然后在A2中,将字体大小设置为Arial,并将大小增加到14点。最后,在A3中,将字体更改为Tahoma,将字体大小更改为16磅。对于第二种和第三种字体,您还可以更改文本颜色。在A2中,将颜色设置为红色,在A3中,将颜色设置为绿色。当您运行此代码时,您的输出将如下所示:尝试更改代码以使用不同的字体或颜色。如果您想冒险,您应该尝试将文本加粗或斜体化。现在您已准备好学习文本对齐。设置对齐方式您可以使用openpyxl.styles.Alignment在OpenPyXL中设置对齐方式。您可以使用此类来旋转文本、设置文本换行和缩进。以下是Alignment类使用的默认值:?horizo??ntal='general'?vertical='bottom'?text_rotation=0?wrap_text=False?shrink_to_fit=False?indent=0打开Python编辑器,创建一个文件名为alignment.py的新文件。然后在其中添加以下代码:#alignment.pyfromopenpyxlimportWorkbookfromopenpyxl.stylesimportAlignmentdefcenter_text(path,horizo??ntal="center",vertical="center"):workbook=Workbook()sheet=workbook.activesheet["A1"]="Hello"sheet["A1"].alignment=Alignment(horizo??ntalhorizo??ntal=horizo??ntal,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")当您运行这段代码时,您将在A1中将字符串水平和垂直居中。然后使用A2的默认值。最后,对于A3,将文本旋转90度。尝试运行这段代码,您会看到类似这样的结果:最好花时间尝试不同的text_rotation值。然后尝试将水平和垂直参数更改为不同的值。很快,您就会像专业人士一样对齐文本!现在您已准备好学习如何为单元格添加边框!添加边框OpenPyXL使您能够设置单元格边框的样式。您可以为单元格的四个边分别指定不同的边框样式。您可以使用以下任何一种边框样式:?'dashDot'?'dashDotDot'?'dashed'?'dotted'?'double'?'hair'?'medium'?'mediumDashDot'?'mediumDashDotDot'?'mediumDashed'?'slantDashDot'?'thick'?'thin'打开Python编辑器并创建一个名为border.py的新文件。然后在文件中输入以下代码:#border.pyfromopenpyxlimportWorkbookfromopenpyxl.stylesimportBorder,Sidedefborder(path):pink="00FF00FF"green="00008000"thin=Side(border_style="thin",color=pink)double=Side(border_style="double",color=green)workbook=Workbook()sheet=workbook.activesheet["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的顶部和底部使用“双”边框样式,颜色为绿色,而单元格的两侧使用“细”边框样式,颜色为粉红色。单元格A3使用相同的边框,但交换了边框,现在边为绿色,顶部和底部为粉红色。您可以通过使用border_style和您要使用的颜色创建一个Side对象来获得此效果。然后将这些Side对象传递给Border类,它允许您分别设置单元格的四个边。要将边框应用于单元格,您必须设置单元格的边框属性。以下是您在运行此代码时将看到的内容:此图像被放大了很多,以便您可以轻松地看到单元格的边界。如果您尝试使用本节开头提到的一些其他边框样式修改此代码,您会看到您还能做些什么。更改单元格背景颜色您可以通过更改背景颜色来突出显示一个单元格或一系列单元格。在大多数情况下,突出显示单元格比更改文本的字体或颜色更引人注目。OpenPyXL为您提供了一个名为PatternFill的类,您可以使用它来更改单元格的背景颜色。PatternFill类接受以下参数(下面包括默认值):?patternType=None?fgColor=Color()?bgColor=Color()?fill_type=None?start_color=None?end_color=None您可以使用多种不同的填充类型。以下是当前支持的填充类型列表:?'none'?'solid'?'darkDown'?'darkGray'?'darkGrid'?'darkHorizo??ntal'?'darkTrellis'?'darkUp'?'darkVertical'?'gray0625'?'gray125'?'lightDown'?'lightGray'?'lightGrid'?'lightHorizo??ntal'?'lightTrellis'?'lightUp'?'lightVertical'?'mediumGray'现在您有足够的信息来尝试设置单元格的背景使用OpenPyXL颜色。在Python编辑器中打开一个新文件并将其命名为background_colors.py。然后将此代码添加到您的新文件中:#background_colors.pyfromopenpyxlimportWorkbookfromopenpyxl.stylesimportPatternFilldefbackground_colors(path):workbook=Workbook()sheet=workbook.activeyellow="00FFFF00"forrowsinsheet.iter_rows(min_row=1,max_row=10,min_col=1,max_col=12):forcelinrows:ifcell.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列。如果单元格位于奇数行,它将每个单元格的背景颜色设置为黄色。背景颜色变化的单元格将从A列到L列。当你想设置单元格的背景色时,可以将单元格的fill属性设置为PatternFill的一个实例。在此示例中,您指定start_color和end_color。您还将fill_type设置为“solid”。OpenPyXL还支持使用GradientFill作为背景。尝试运行这段代码。运行后,您将拥有一个新的Excel文档,如下所示:以下是您可以使用此代码尝试的一些想法:?更改受影响的行数或列数?更改要更改的颜色?更新要使用的代码用不同的颜色给偶数行上色?尝试其他填充类型完成对背景颜色的试验后,您可以学习如何在单元格中插入图像!将图像插入单元格OpenPyXL使将图像插入Excel电子表格变得容易。要实现这一魔法,您可以使用Worksheet对象的add_image()方法。该方法接受两个参数:img-您要插入的图像文件的路径GitHub存储库中有可供您使用的图像。下载图像后,创建一个新的Python文件并将其命名为insert_image.py。然后添加以下内容:#insert_image.pyfromopenpyxlimportWorkbookfromopenpyxl.drawing.imageimportImagedefinsert_image(path,image_path):workbook=Workbook()sheet=workbook.activeimg=Image("logo.png")sheet.add_image(img,"B1")workbook。save(path)if__name__=="__main__":insert_image("logo.xlsx","logo.png")这里传入要插入图片的路径。要插入图像,请调用add_image()。在此示例中,您正在硬编码以使用单元格B1作为定位单元格。然后保存Excel电子表格。如果您打开电子表格,您会看到它看起来像这样:您可能不需要经常将图像插入Excel电子表格,但这是一项出色的技能。StyleMergeCell合并单元格就是将两个或多个相邻的单元格合并为一个单元格。如果要使用OpenPyXL设置合并单元格的值,则必须使用合并单元格的最左上角的单元格。您还必须使用此特定单元格设置整个合并单元格的样式。您可以将您在单个单元格上使用的所有样式和字体设置与合并单元格一起使用。但是,您必须将样式应用于左上角的单元格才能将其应用于整个合并的单元格。如果您看到一些代码,就会明白这是如何工作的。继续创建一个名为style_merged_cell.py的新文件。现在在您的文件中输入以下代码:#style_merged_cell.pyfromopenpyxlimportWorkbookfromopenpyxl.stylesimportFont,Border,Side,GradientFill,Alignmentdefmerge_style(path):workbook=Workbook()sheet=workbook.activesheet.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="HellofromPyOpenXL"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,颜色="FF0000",size=16)top_left_cell.alignment=Alignment(horizo??ntal="center",vertical="center")workbook.save(path)if__name__=="__main__":merge_style("merged_style.xlsx")在这里,您创建一个从A2(左上角的单元格)到G4的合并单元格。然后设置单元格的值、边框、填充、字体和对齐方式。当您运行这段代码时,您的新电子表格将如下所示:您应该花一些时间在合并的单元格上尝试几种不同的样式。例如,也许想出比这里使用的灰色更好的渐变。现在您已准备好了解OpenPyXL的内置样式!使用内置样式OpenPyXL附带了多种您也可以使用的内置样式。与其复制本书中内置样式的完整列表,不如查看官方文档,因为它将是样式名称的最新来源。但是,值得注意的是其中一些样式。例如,以下是您可以使用的数字格式样式:?'Comma'?'Comma[0]'?'Currency'?'Currency[0]'?'Percent'您还可以应用文本样式。以下是这些样式的列表:?'Title'?'Headline1'?'Headline2'?'Headline3'?'Headline4'?'Hyperlink'?'FollowedHyperlink'?'LinkedCell'OpenPyXL还有其他几个样式的内置样式组。您应该查看文档以查看支持的所有不同样式。现在您知道了一些可以使用的内置样式,是时候编写一些代码了!创建一个新文件并将其命名为builtin_styls.py。然后输入以下代码:#builtin_styles.pyfromopenpyxlimportWorkbookdefbuiltin_styles(path):workbook=Workbook()sheet=workbook.activesheet["A1"].value="Hello"sheet["A1"].style="Title"sheet["A2"].value="from"sheet["A2"].style="Headline1"sheet["A3"].value="OpenPyXL"sheet["A3"].style="Headline2"workbook.save(path)if__name__=="__main__":builtin_styles("builtin_styles.xlsx")这里您将三种不同的样式应用于三个不同的单元格。您可以使用“标题”、“标题1”和“标题2”。当您运行这段代码时,您最终会得到一个如下所示的电子表格:与往常一样,您应该尝试一些其他内置样式。尝试它们是确定它们的作用以及它们是否适合您的唯一方法。如果你想创造你的风格怎么办?这就是您将在下一节中介绍的内容!创建自定义命名样式您还可以使用OpenPyXL为您的设计创建自定义样式。要创建样式,您必须使用NamedStyle类。NamedStyle类采用以下参数(也包括默认值):?name="Normal"?font=Font()?fill=PatternFill()?border=Border()?alignment=Alignment()?number_format=None?protection=Protection()?builtinId=None?hidden=False?xfId=None您应该始终为您的NamedStyle命名以保持其唯一性。继续创建一个新文件并将其命名为named_style.py。然后在其中添加以下代码:#named_style.pyfromopenpyxlimportWorkbookfromopenpyxl.stylesimportFont,Border,Side,NamedStyledefnamed_style(path):workbook=Workbook()sheet=workbook.activered="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_stylesheet["A2"].value="from"sheet["A3"].value="OpenPyXL"workbook.save(path)if__name__=="__main__":named_style("named_style.xlsx")在这里您创建一个Font()、Side()和Border()的实例以传递给您的NamedStyle()。创建自定义样式后,您可以通过设置单元格的样式属性将其应用到单元格。以与应用内置样式相同的方式应用自定义样式!您将自定义样式应用于单元格A1。当您运行这段代码时,您会得到一个如下所示的电子表格:现在轮到您了!编辑代码以使用Side样式,这将更改您的边框。或者创建Side的多个实例,这样您就可以使单元格的每一面都独一无二。使用不同的字体或添加自定义背景颜色!总之,您可以使用OpenPyXL对单元格做很多不同的事情。本文中的信息使您能够优雅地格式化数据。在本文中,您了解了以下主题:?使用字体?设置对齐方式?添加边框?更改单元格背景颜色?将图像插入单元格?设置合并单元格的样式?使用内置样式?创建自定义命名样式您可以使用Make漂亮的电子表格以及您在本文中学到的内容。您可以通过更改单元格的背景颜色或字体来突出显示特定数据。您还可以使用内置样式更改单元格的格式。OpenPyXL在处理细胞时非常强大和有价值。