python - openpyxl模块使用基本操作一览总表
Workbook(class)工作簿对象
工作簿对象.sheetnames 获取当前工作簿中所有表的名字 工作簿对象.active 获取当前活动表1对应的Worksheet对象 工作簿对象[表名] 根据表名获取指定表对象 工作簿对象.save(文件路径) 保存文件 工作簿对象.create_sheet(title, index) 在指定工作簿中的指定位置(默认是最后)创建指定名字的表,并且返回表对象 工作簿对象.copy_worksheet(sheet) 复制sheet表 工作簿对象.remove(表对象) 删除工作簿中的指定表 工作簿对象.add_named_style(TitleStyle) 把自定义TitleStyle的样式(NamedStyle方法)添加到工作簿
sheet(class)表对象
表对象.title 获取表对象的表名 表对象[‘列号行号’] 获取指定列的指定行对应的单元格对象(单元格对象是Cell类的对象,列号是从A开始,行号是从1开始) 表对象.cell(row=行号, column=列号, value=值) 获取指定行指定列对应的单元格(这儿的行号和列好号都可以用数字) 表对象[位置1:位置2] 获取指定范围中的所有单元格 表对象[“A:C”] 获取A,B,C三列的数据,列为字母 表对象[5] 只获取第5行的数据,行为数字 表对象.iter_rows() 按行读取 表对象.iter_cols() 按列读取 表对象.max_row 获取数据区域的最大行号 表对象.min_row 获取数据区域的最小行号 表对象.max_column 获取数据区域的最大列号(列号返回的是数字) 表对象.min_column 获取数据区域的最小列号 表对象[位置] = 值 在表中指定位置对应的单元格中写入指定的值。位置是字符串(‘A1’指第1列的第1行) 表对象[位置].value = 值 修改单元格的值 表对象.append() 在原来数据的后面,按行插入数据 表对象.insert_rows(idx=数字编号, amount=要插入的行数) 插入空行,插入的行数是在idx行数的下方(amount不填,默认为1) 表对象.insert_cols(idx=数字编号, amount=要插入的列数) 插入空列,插入的位置是在idx列数的左侧 表对象.delete_rows(idx=数字编号, amount=要删除的行数) 删除行 表对象.delete_cols(idx=数字编号, amount=要删除的列数) 删除列 表对象.move_range(“数据区域”,rows=,cols=,translate=False) 移动指定区间的单元格。【正整数为向下或向右、负整数为向左或向上,translate=False默认不把公式也跟着移动 】 表对象.sheet_properties.tabColor = “FF0000” 修改sheet名背景颜色 表对象.freeze_panes = ‘A2’ 点到A2单元格然后按冻结窗口 表对象.column_dimensions.group(start, end=None, outline_level=1, hidden=False) 列组合。【# start必须要有的参数,从那一列开始折叠。end是结束的列。outline_level组合分级。hidden是否把组合折叠起来,隐藏内容。】 表对象.row_dimensions.group(start, end=None, outline_level=1, hidden=False) 行组合 表对象.row_dimensions[行编号].height = 行高 设置行高 表对象.column_dimensions[列编号].width = 列宽 设置列宽 表对象.merge_cells(‘列号行号’) 合并单元格。如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。 表对象.merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号) 合并单元格。 表对象.unmerge_cells(‘列号行号’) 拆分合并单元格 表对象.unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号) 拆分合并单元格 表对象.conditional_formatting.add(‘C2:C7’, rule) 添加单元格规则。【# 表对象.conditional_formatting = ConditionalFormattingList() 清除工作表中的条件格式 】
cell(class)单元格对象
单元格对象.value 获取单元格中的内容 单元格对象.row 获取行号(数字1开始) 单元格对象.column 获取列号(数字1开始) 单元格对象.coordinate 获取位置(包括行号和列号) 单元格对象.font 查看字体样式(单元格对象.font.name, size, bold, italic, color) 单元格对象.font.size 查看字体大小 单元格对象.border 单元格外框样式 单元格对象.fill 单元格背景颜色 单元格对象.alignment 单元格对齐格式 单元格对象.style 自定义单元格样式 单元格对象.number_format = ‘General’ 设置数字格式。【# 可以填的参数有: 'General’常规,'0’整数格式,'0.00’小数点格式,'0%'百分比格式,‘0.00%‘带小数点的百分比格式,’#,##0’货币格式,’#,##0.00’带小数点的货币格式,'0.00E+00’科学计算法,'mm-dd-yy’短日期格式,'h:mm:ss’时分秒格式 】 单元格对象.comment 添加注释
其他openpyxl对象
openpyxl.load_workbook(‘路径’) 打开给定路径下的文件名并返回一个workbook数据类型的值[工作簿]。(会把整个工作簿中的所有内容都导入进来,这个workbook对象代表这个Excel文件) openpyxl.Workbook() 创建空的 Excel 文件对应的工作簿对象
from openpyxl.utils import get_column_letter, column_index_from_string
openpyxl.utils.get_column_letter(列数字) 根据列的数字返回字母 openpyxl.utils.column_index_from_string(‘行字母’) 根据字母返回列的数字
from openpyxl.styles import Font, PatternFill, Side, Border, Alignment, NamedStyle 单元格样式
Font字体样式, PatternFill单元格背景颜色, Side对象是作为Border对象的参数值(定义边样式), Border单元格外框样式, Alignment单元格对齐格式, NamedStyle自定义单元格样式
openpyxl.styles.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字体名称(major标题,minor正文)。# size/sz字体大小。# bold/b是否加粗(bool值)。# italic/i是否斜体(bool值)。# color字体颜色是RGB的16进制表示。# underline/u下划线。# strikethrough/strike删除线(bool值)。 】 单元格对象.font 查看字体样式(单元格对象.font.name, size, bold, italic, color) openpyxl.styles.PatternFill(patternType=None, fgColor=Color(), bgColor=Color(), fill_type=None, start_color=None, end_color=None) 设置单元格背景颜色。【# patternType / fill_type 填充样式,一般为’solid’纯色填充# fgColor参数需要传入一个十六进制的颜色码 】 单元格对象.fill 单元格背景颜色。 openpyxl.styles.Side(style=None, color=None, border_style=None) 定义单元格的外框样式。【# style/border_style边框样式:参数需要加入样式类型:dashDot,dashDotDot,dashed,dotted, double双重,hair,medium中等,mediumDashDot, mediumDashDotDot,mediumDashed,slantDashDot,thick,thin细条。 # color边框颜色:参数需要加入十六进制颜色码。 】 openpyxl.styles.Border(left=None, right=None, top=None, bottom=None, diagonal=None, diagonal_direction=None, vertical=None, horizontal=None, diagonalUp=False, diagonalDown=False, outline=True, start=None, end=None) 设置单元格的外框样式。【# top / bottom / left / right 分别对上下左右设置边框# diagonalUp:是否设置对角线向上(bool值)# diagonalDown:是否设置对角线向下(bool值)# 当设置了上面选项后,再来设置 diagonal 】 单元格对象.border 单元格外框样式 openpyxl.styles.Alignment(horizontal=None, vertical=None, textRotation=0, wrapText=None, shrinkToFit=None, indent=0, relativeIndent=0, justifyLastLine=None, readingOrder=0, text_rotation=None, wrap_text=None, shrink_to_fit=None) 设置对齐格式。【# horizontal代表水平方向对齐 方式:general常规, left靠左, center居中, right靠右, fill填充, justify两端对齐, centerContinuous跨列居中, distributed分散对齐# vertical代表垂直方向对齐 方式:top, center, bottom, justify两端对齐, distributed分散对齐# wrapText / wrap_text 是否自动换行(bool值)# shrinkToFit / shrink_to_fit是否缩小字体填充(bool值)# justifyLastLine 是否合并单元格(bool值)# indent 缩进# textRotation / text_rotation 文本旋转角度 】 单元格对象.alignment 单元格对齐格式。 openpyxl.styles.NamedStyle( name=“Normal”, font=Font(), fill=PatternFill(), border=Border(), alignment=Alignment(), number_format=None,protection=Protection(),builtinId=None,hidden=False,xfId=None) 自定义单元格样式。【# name就是这个自定义样式的名字,然后对设置了该样式的单元格设置font, fill , border, alignment, number_format, protection等 】 单元格对象.style 自定义单元格样式 工作簿.add_named_style(TitleStyle) 把自定义的单元格样式添加到工作簿
from openpyxl.comments import Comment 添加注释
openpyxl.comments.Comment(text, author, height=79, width=144) 添加注释(text注释内容, author作者)。
条件格式
from openpyxl.formatting.rule import DataBarRule,CellIsRule,FormulaRule 内置、标准、自定义条件格式
Excel支持三种不同类型的条件格式:内置、标准和自定义
内置的条件格式 :将特定的规则与预定义的样式相结合:ColorScaleRule(色阶),IconSetRule(图标集),DataBarRule (数据条);标准条件格式 :将特定规则与自定义格式相结合:CellIsRule 基于单元格内容设置条件格式规则,FormulaRule 基于公式设置条件格式规则,DifferentialStyle 差异化样式设置(Average平均值,Percent百分比,Unique or duplicate唯一值或重复值,Value值,Rank排名);自定义格式 :将自定义的规则与自定义格式相结合。 CellIsRule“条件格式>突出显示单元格”命令, DataBarRule条件格式>数据条”命令
openpyxl.formatting.rule.CellIsRule(operator=‘lessThan’,formula=[‘C$1’],fill=redFill) 对指定单元格区域,进行条件塞选并突出显示设置(点击“开始”选项卡中的“条件格式>突出显示单元格”命令,选择要设置的条件,满足条件的单元格会被突出显示)。【# operator表示具体的条件类型是什么,可选的参数值及对应的类型:notEqual不等于,greaterThanOrEqual大于或等于,lessThanOrEqual小于或等于,notContains不包含某某,notBetween不介于某某,lessThan小于,beginsWith以某某开始,containsTest包含某某,equal等于某某,between介于某某,endsWith以某某结束,greaterThan大于# formula表示具体的条件类型需要满足的条件值# fill表示对满足条件的单元格突出显示的设置 】 openpyxl.formatting.rule.DataBarRule(start_type=‘min’, end_type=‘max’, color=“FF638EC6”, showValue=True) 数据条。如果要对数据进行数据条格式的设置,则先选中需要设置的单元格(点击“开始”选项卡中的“条件格式>数据条”命令,在弹出的下拉菜单中选择需要的样式)。【# start_type对应Excel中的最小值类型,可选的参数值及对应的含义: percentile百分点值(分位数),formula公式,percent百分比,max最大值,min最小值,num数字# start_value用于指定start_type的值# end_type和end_value用于设置最大值类型和其对应的值# color用于设置数据条的颜色# showValue用于设置是否显示数据条上的数字 】 openpyxl.formatting.rule.FormulaRule(formula=None, stopIfTrue=None, font=None, border=None, fill=None) 基于公式设置条件格式规则。 表对象.conditional_formatting.add(‘C2:C7’, rule) 添加应用单元格规则。【表对象.conditional_formatting = ConditionalFormattingList() # 清除工作表中的条件格式】
from openpyxl.styles.differential import DifferentialStyle 差异化样式设置
from openpyxl.formatting import Rule
openpyxl.formatting.rule.DifferentialStyle(font=None, numFmt=None, fill=None, alignment=None, border=None, protection=None, extLst=None) 差异化样式设置。
from openpyxl.worksheet.table import Table 添加下拉选择项表格
openpyxl.worksheet.table.Table(displayName=“表格名”, ref=“选项表格范围”) 添加下拉选择项表格范围 表对象.add_table(table) 添加下拉选择项表格范围
from openpyxl.drawing.image import Image 添加图片
插入图片另外需要安装pillow模块pip3.7 install pillow
表对象.openpyxl.drawing.image.add_image(img, anchor=None) 添加图片【 # img图片路径。# anchor指定图像左上角所锚定的单元格。】
示例代码如下:
import openpyxl
import os
import sys
from openpyxl. utils import get_column_letter, column_index_from_string
from openpyxl. styles import Font, PatternFill, Alignment, Side, Border, NamedStyle
from openpyxl. comments import Comment
from openpyxl. formatting. rule import CellIsRule, DataBarRule, FormulaRule
from openpyxl. worksheet. table import Table
from openpyxl. drawing. image import Image
from openpyxl. styles. differential import DifferentialStyle
from openpyxl. formatting import Rule
'''
data.xlsx
number A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
'''
'''
Excel的三个概念:工作蒲(workbook),工作表(worksheet)和单元格(cell)。
从工作簿中取得工作表
openpyxl.load_workbook('路径') - 打开给定路径下的文件名并返回一个workbook数据类型的值[工作簿](会把整个工作簿中的所有内容都导入进来,这个workbook对象代表这个Excel文件)
工作簿对象.sheetnames - 获取当前工作簿中 所有表的名字
工作簿对象.active - 获取当前 活动表1 对应的Worksheet对象
工作簿对象[表名] - 根据表名获取指定 表对象
表对象.title - 获取表对象的 表名
'''
os. chdir( os. path. dirname( sys. argv[ 0 ] ) )
data = openpyxl. load_workbook( 'data.xlsx' )
print ( data. sheetnames, data. active, data[ 'Sheet2' ] )
print ( data. active. title, data[ 'Sheet2' ] . title)
'''
从表中取得单元格
表对象['列号行号'] - 获取指定列的指定行对应的单元格对象(单元格对象是 Cell 类的对象,列号是从A开始,行号是从1开始)
表对象.cell(row=行号, column=列号, value=值) - 获取指定行指定列对应的单元格(这儿的行号和列好号都可以用数字)
表对象.iter_rows() - 一行一行的取
表对象.iter_cols() - 列表一列的取
单元格对象.value - 获取单元格中的内容
单元格对象.row - 获取行号(数字1开始)
单元格对象.column - 获取列号(数字1开始)
单元格对象.coordinate - 获取位置(包括行号和列号)
'''
sheetData = data. active
print ( sheetData[ 'A2' ] , sheetData[ 'A2' ] . value)
content = sheetData. cell( 2 , 2 )
print ( content. row, content. column, content. coordinate)
'''
从表中取得行和列
表对象也可以像列表或者字符串那样进行 切片 操作,来获取电子表格中一行、一列或一个 矩形区域 中的所有 Cell 对象,然后就可以对数据进行相应的操作。
表对象[位置1:位置2] — 获取指定范围中的所有的单元格
表对象[“A:C”] — 获取A,B,C三列的数据,列为字母
表对象[5] — 只获取第5行的数据,行为数字
表对象.iter_rows() — 按行读取
表对象.iter_cols() — 按列读取
表对象.max_row — 获取数据区域的最大行号
表对象.min_row — 获取数据区域的最小行号
表对象.max_column — 获取数据区域的最大列号
表对象.min_column — 获取数据区域的最小列号
# from openpyxl.utils import get_column_letter, column_index_from_string
get_column_letter(列数字) — 根据列的数字返回字母
column_index_from_string('行字母') — 根据字母返回列的数字
'''
max_row = sheetData. max_row
column = get_column_letter( sheetData. max_column)
print ( sheetData[ 'A1' : '%s1' % column] )
for cells in sheetData. iter_rows( min_row= 2 , max_row= 5 , min_col= 1 , max_col= 2 ) :
for cell in cells:
print ( cell. value)
'''
创建保存修改Excel/写入数据
openpyxl.Workbook() - 创建空的 Excel 文件对应的工作簿对象
工作簿对象.save(文件路径) - 保存文件
工作簿对象.create_sheet(title, index) - 在指定工作簿中的指定位置(默认是最后)创建指定名字的表,并且返回表对象
工作簿对象.copy_worksheet(sheet) - 复制sheet表
工作簿对象.remove(表对象) - 删除工作簿中的指定表
表对象[位置] = 值 - 在表中指定位置对应的单元格中写入指定的值。位置是字符串(‘A1’指第1列的第1行)
表对象[位置].value = 值 - 修改单元格的值
表对象.append() - 在原来数据的后面,按行插入数据
表对象.insert_rows(idx=数字编号, amount=要插入的行数) - 插入空行,插入的行数是在idx行数的下方插入
表对象.insert_cols(idx=数字编号, amount=要插入的列数) - 插入空列,插入的位置是在idx列数的左侧插入
表对象.delete_rows(idx=数字编号, amount=要删除的行数) - 删除行
表对象.delete_cols(idx=数字编号, amount=要删除的列数) - 删除列
表对象.move_range(“数据区域”,rows=,cols=,translate=False) - 移动指定区间的单元格(正整数为向下或向右、负整数为向左或向上、translate=False默认不把公式也跟着移动)
表对象.sheet_properties.tabColor = "1072BA" - 修改sheet名背景颜色
表对象.freeze_panes = 'A2' - 点到A2单元格然后按冻结窗口
表对象.column_dimensions.group(start, end=None, outline_level=1, hidden=False) - 列组合
表对象.row_dimensions.group(start, end=None, outline_level=1, hidden=False) - 行组合
# start必须要有的参数,从那一列开始折叠。end是结束的列。outline_level组合分级。hidden是否把组合折叠起来,隐藏内容。
'''
info = openpyxl. Workbook( )
sheetActive = info. active
sheetActive. title = 'first_table'
info. create_sheet( )
info. create_sheet( 'second_table' , 1 )
info. copy_worksheet( info[ 'first_table' ] )
print ( info. sheetnames)
info. remove( info[ 'Sheet' ] )
info. save( 'info.xlsx' )
info = openpyxl. load_workbook( 'info.xlsx' )
sheetInfo = info[ 'first_table' ]
sheetInfo[ 'A1' ] = '姓名'
sheetInfo[ 'B1' ] . value = 'age'
sheetInfo[ 'C1' ] = 'years'
sheetInfo[ 'D1' ] = '2years'
nameAge = [
[ '素子' , 23 , 5 , 10 ] ,
[ '巴特' , 24 , 6 , 6 ] ,
[ 'AA' , 25 , 3 , 89 ] ,
]
for row in nameAge:
sheetInfo. append( row)
sheetInfo. insert_cols( idx= 2 , amount= 3 )
sheetInfo. delete_cols( idx= 2 , amount= 3 )
sheetInfo. move_range( 'A1:D4' , rows= 0 , cols= 1 , translate= False )
sheetInfo. sheet_properties. tabColor = "FF0000"
sheetInfo. freeze_panes = 'A2'
sheetInfo. row_dimensions. group( 11 , 13 , 1 , True )
'''
单元格样式修改
单元格对象.font - 查看字体样式(单元格对象.font.name, size, bold, italic, color)
单元格对象.border - 单元格外框样式
单元格对象.fill - 单元格背景颜色
单元格对象.alignment - 单元格对齐格式
单元格对象.style - 自定义单元格样式
# from openpyxl.styles import Font, PatternFill, Side, Border, Alignment, NamedStyle
# Font字体样式, PatternFill单元格背景颜色, Side对象是作为Border对象的参数值(定义边样式), Border单元格外框样式, Alignment单元格对齐格式, NamedStyle自定义单元格样式
openpyxl.styles.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字体名称(major标题,minor正文)。size/sz字体大小。bold/b是否加粗(bool值)。italic/i是否斜体(bool值)。color字体颜色是RGB的16进制表示。underline/u下划线。strikethrough/strike删除线(bool值)。
openpyxl.styles.PatternFill(patternType=None, fgColor=Color(), bgColor=Color(), fill_type=None, start_color=None, end_color=None) - 设置单元格背景颜色
# patternType / fill_type 填充样式,一般为'solid'纯色填充
# fgColor参数需要传入一个十六进制的颜色码
openpyxl.styles.Side(style=None, color=None, border_style=None) - 定义单元格的外框样式
# style/border_style边框样式:参数需要加入样式类型:dashDot,dashDotDot,dashed,dotted, double双重,hair,medium中等,mediumDashDot, mediumDashDotDot,mediumDashed,slantDashDot,thick,thin细条。
# color边框颜色:参数需要加入十六进制颜色码。
openpyxl.styles.Border(left=None, right=None, top=None, bottom=None, diagonal=None, diagonal_direction=None, vertical=None, horizontal=None, diagonalUp=False, diagonalDown=False, outline=True, start=None, end=None) - 设置单元格的外框样式
# top / bottom / left / right 分别对上下左右设置边框
# diagonalUp:是否设置对角线向上(bool值)
# diagonalDown:是否设置对角线向下(bool值)
# 当设置了上面选项后,再来设置 diagonal
openpyxl.styles.Alignment(horizontal=None, vertical=None, textRotation=0, wrapText=None, shrinkToFit=None, indent=0, relativeIndent=0, justifyLastLine=None, readingOrder=0, text_rotation=None, wrap_text=None, shrink_to_fit=None) - 设置对齐格式
# horizontal代表水平方向对齐 方式:general常规, left靠左, center居中, right靠右, fill填充, justify两端对齐, centerContinuous跨列居中, distributed分散对齐
# vertical代表垂直方向对齐 方式:top, center, bottom, justify两端对齐, distributed分散对齐
# wrapText / wrap_text 是否自动换行
# shrinkToFit / shrink_to_fit 是否缩小字体填充
# justifyLastLine 是否合并单元格
# indent 缩进
# textRotation / text_rotation 文本旋转角度
openpyxl.styles.NamedStyle( name="Normal", font=Font(), fill=PatternFill(), border=Border(), alignment=Alignment(), number_format=None,protection=Protection(),builtinId=None,hidden=False,xfId=None) - 自定义单元格样式
# name就是这个自定义样式的名字,然后对设置了该样式的单元格设置font, fill , border, alignment, number_format, protection等
工作簿对象.add_named_style(TitleStyle) - 把自定义TitleStyle的样式(NamedStyle方法)添加到工作簿
表对象.row_dimensions[行编号].height = 行高 - 设置行高
表对象.column_dimensions[列编号].width = 列宽 - 设置列宽
表对象.merge_cells('列号行号') - 合并单元格。如果要合并的格子中有数据,即便python没有报错,Excel打开的时候也会报错。
表对象.merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号) - 合并单元格。
表对象.unmerge_cells('列号行号') - 拆分合并单元格
表对象.unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号) - 拆分合并单元格
单元格对象.number_format = 'General' - 设置数字格式。
# 可以填的参数有: 'General'常规,'0'整数格式,'0.00'小数点格式,'0%'百分比格式,'0.00%'带小数点的百分比格式,'#,##0'货币格式,'#,##0.00'带小数点的货币格式,'0.00E+00'科学计算法,'mm-dd-yy'短日期格式,'h:mm:ss'时分秒格式
单元格对象.comment - 添加注释 # from openpyxl.comments import Comment
openpyxl.comments.Comment(text, author, height=79, width=144) - 添加注释(text注释内容, author作者)
'''
print ( sheetInfo[ 'B1' ] . font. size)
for i in sheetInfo[ 'C' ] :
i. font = openpyxl. styles. Font( name= "微软雅黑" , size= 20 , bold= True , italic= True , color= "0000FF" )
i. fill = openpyxl. styles. PatternFill( "solid" , fgColor= "FFFF00" )
i. alignment = openpyxl. styles. Alignment( horizontal= "center" , vertical= "center" , text_rotation= 0 , wrap_text= True )
side1 = openpyxl. styles. Side( style= "thin" , color= "000000" )
i. border = openpyxl. styles. Border( left= side1, right= side1, top= side1, bottom= side1)
i. number_format = 'General'
mySide = Side( style= 'thin' , color= '1E1E1E' )
TitleStyle = openpyxl. styles. NamedStyle( name= 'TitleStyle' ,
font= Font( name= '宋体' , size= 14 , bold= True ) ,
fill= PatternFill( fill_type= 'solid' , start_color= '1BA135' ) ,
border= Border( left= mySide, top= mySide, right= mySide, bottom= mySide) ,
alignment= Alignment( horizontal= 'center' , vertical= 'center' ) )
info. add_named_style( TitleStyle)
for c in range ( 2 , 6 ) :
sheetInfo. cell( 1 , c) . style = TitleStyle
sheetInfo. row_dimensions[ 1 ] . height = 50
sheetInfo. column_dimensions[ 'B' ] . width = 20
sheetInfo. merge_cells( 'A5:A6' )
sheetInfo. merge_cells( start_row= 7 , start_column= 1 , end_row= 8 , end_column= 1 )
sheetInfo. cell( 1 , 1 ) . comment = Comment( text= '增加注释' , author= 'Jc' )
'''
条件格式
Excel支持三种不同类型的条件格式:内置、标准和自定义
内置的条件格式:将特定的规则与预定义的样式相结合:ColorScaleRule(色阶),IconSetRule(图标集),DataBarRule(数据条);
标准条件格式:将特定规则与自定义格式相结合:CellIsRule基于单元格内容设置条件格式规则,FormulaRule基于公式设置条件格式规则,DifferentialStyle差异化样式设置(Average平均值,Percent百分比,Unique or duplicate唯一值或重复值,Value值,Rank排名);
自定义格式:将自定义的规则与自定义格式相结合。
表对象.conditional_formatting.add('C2:C7', rule) - 添加应用单元格规则。[表对象.conditional_formatting = ConditionalFormattingList() # 清除工作表中的条件格式]
# from openpyxl.formatting.rule import DataBarRule, CellIsRule, FormulaRule
# DataBarRule内置的条件格式/数据条:”条件格式>数据条”命令。CellIsRule基于单元格内容设置条件格式规则:“条件格式>突出显示单元格”命令。FormulaRule基于公式设置条件格式规则。
openpyxl.formatting.rule.DataBarRule(start_type=None, start_value=None, end_type=None, end_value=None, color=None, showValue=None, minLength=None, maxLength=None) - 数据条帮助查看某个单元格相对于其他单元格的值(点击“开始”选项卡中的“条件格式>数据条”命令,在弹出的下拉菜单中选择需要的样式)
# 内置的条件格式 - 数据条可帮助查看某个单元格相对于其他单元格的值(数据条的长度代表单元格中的值。 数据条越长,表示值越高,数据条越短,表示值越低)
# start_type对应Excel中的最小值类型,可选的参数值及对应的含义: percentile百分点值(分位数),formula公式,percent百分比,max最大值,min最小值,num数字
# start_value用于指定start_type的值
# end_type和end_value用于设置最大值类型和其对应的值
# color用于设置数据条的颜色
# showValue用于设置是否显示数据条上的数字
openpyxl.formatting.rule.CellIsRule(operator=None, formula=None, stopIfTrue=None, font=None, border=None, fill=None) - 基于单元格内容设置条件格式规则。(对指定单元格区域,进行条件塞选并突出显示设置。点击“开始”选项卡中的“条件格式>突出显示单元格”命令,选择要设置的条件,满足条件的单元格会被突出显示)
# operator表示具体的条件类型是什么,可选的参数值及对应的类型:notEqual不等于,greaterThanOrEqual大于或等于,lessThanOrEqual小于或等于,notContains不包含某某,notBetween不介于某某,lessThan小于,beginsWith以某某开始,containsTest包含某某,equal等于某某,between介于某某,endsWith以某某结束,greaterThan大于
# formula表示具体的条件类型需要满足的条件值
# fill表示对满足条件的单元格突出显示的设置
openpyxl.formatting.rule.FormulaRule(formula=None, stopIfTrue=None, font=None, border=None, fill=None) - 基于公式设置条件格式规则。
# from openpyxl.styles.differential import DifferentialStyle
# from openpyxl.formatting import Rule
openpyxl.formatting.rule.DifferentialStyle(font=None, numFmt=None, fill=None, alignment=None, border=None, protection=None, extLst=None) - 差异化样式设置。
'''
rule1 = CellIsRule( operator= 'between' , formula= [ 20 , 23 ] , fill= PatternFill( end_color= 'FFFF2100' ) )
sheetInfo. conditional_formatting. add( 'C2:C6' , rule1)
rule2 = DataBarRule( start_type= 'min' , end_type= 'max' , color= "FF638EC6" , showValue= True )
sheetInfo. conditional_formatting. add( 'D2:D6' , rule2)
rule3 = FormulaRule( formula= [ '$E2=10' ] , fill= PatternFill( end_color= '0000FF' ) )
sheetInfo. conditional_formatting. add( 'E2:E6' , rule3)
rule4 = Rule( dxf= DifferentialStyle( font= Font( bold= True ) , fill= PatternFill( bgColor= "EE1111" ) ) , formula= [ 'NOT(ISERROR(SEARCH("AA",A1)))' ] , type = "containsText" , operator= "containsText" , text= "light" )
sheetInfo. conditional_formatting. add( 'B1:B10' , rule4)
info. save( 'info.xlsx' )
'''
# from openpyxl.worksheet.table import Table
表对象.add_table(table) - 添加下拉选择项表格范围
openpyxl.worksheet.table.Table(displayName="表格名", ref="选项表格范围")
# from openpyxl.drawing.image import Image 另外需要pip3.7 install pillow
表对象.openpyxl.drawing.image.add_image(img, anchor=None) - 添加图片
# img图片路径。
# anchor指定图像左上角所锚定的单元格。
'''
tab = openpyxl. worksheet. table. Table( displayName= "Table1" , ref= "B1:E4" )
sheetInfo. add_table( tab)
img = Image( "test.png" )
img. width = 200
img. height = 100
img. anchor = "D8"
sheetInfo. add_image( img)
info. save( 'info.xlsx' )