python - openpyxl模块使用基本操作一览总表

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指定图像左上角所锚定的单元格。】

示例代码如下:

# -*- coding:utf-8 -*-
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]))  # 更改路径为运行文件***.py下的路径 python3 /user/.../***.py
# openpyxl.load_workbook()函数接受文件名,返回一个workbook数据类型的值。这个workbook对象代表这个Excel文件,这个有点类似File对象代表一个打开的文本文件。
data = openpyxl.load_workbook('data.xlsx')   # 打开给定路径下的文件名并返回一个workbook数据类型的值 (工作簿)
# 返回一个workbook数据类型的名, 获取活动表对应的表对象(表对象就是Worksheet类的对象),根据表名获取工作簿中指定的表
print(data.sheetnames, data.active, data['Sheet2'])   # ---> ['Sheet1', 'Sheet2', 'Sheet3'] <Worksheet "Sheet1"> <Worksheet "Sheet2">
# 根据表对象获取表的名字
print(data.active.title, data['Sheet2'].title)  # ---> Sheet1 Sheet2
'''
    从表中取得单元格
表对象['列号行号'] - 获取指定列的指定行对应的单元格对象(单元格对象是 Cell 类的对象,列号是从A开始,行号是从1开始)
表对象.cell(row=行号, column=列号, value=值) - 获取指定行指定列对应的单元格(这儿的行号和列好号都可以用数字)
表对象.iter_rows() - 一行一行的取
表对象.iter_cols() - 列表一列的取
单元格对象.value - 获取单元格中的内容
单元格对象.row - 获取行号(数字1开始)
单元格对象.column - 获取列号(数字1开始)
单元格对象.coordinate - 获取位置(包括行号和列号) 
'''
# 获取单元格对应的 Cell 对象( A2 表示A列中的第二行,这儿的列号采用的是从A开始的); 获取单元格中的内容
sheetData = data.active
print(sheetData['A2'], sheetData['A2'].value)    # ---> <Cell 'Sheet1'.A2> 1
# 调用表的 cell()方法时,可以传入整数 作为 row 和 column 关键字参数,也可以得到一个单元格
content = sheetData.cell(2, 2)
print(content.row, content.column, content.coordinate)   # 获取单元格的行信息,列信息,位置行列号 ---> 2 2 B2
'''
    从表中取得行和列
表对象也可以像列表或者字符串那样进行 切片 操作,来获取电子表格中一行、一列或一个 矩形区域 中的所有 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])   # 获取第一行所有单元格对象 ---> ((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>),)
# 获取单行单列数据的时候,使用一层for循环;获取多行多列、指定区间的数据时,使用两层for循环
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()  # 创建空的Workbook对象。默认情况下,新建的Workbook对象对应的Excel文件中只有一张名字是 'Sheet' 的表
sheetActive = info.active    # 获取活动表
sheetActive.title = 'first_table'  # 修改表的名字
info.create_sheet()   # 新建表时,从Sheet开始一直到Sheet n
info.create_sheet('second_table', 1)
info.copy_worksheet(info['first_table'])
print(info.sheetnames)  # ---> ['first_table', 'second_table', 'Sheet', 'first_table Copy']
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)   # 使用append插入数据
sheetInfo.insert_cols(idx=2, amount=3)  # 插入第2列,及往右共2列
sheetInfo.delete_cols(idx=2, amount=3)  # 删除第2列,及往右共2列
sheetInfo.move_range('A1:D4', rows=0, cols=1, translate=False)  # 移动A1到D4构成的矩形格子,向右移动1列(正整数为向下或向右、负整数为向左或向上)

sheetInfo.sheet_properties.tabColor = "FF0000"    # 修改sheet名背景颜色
sheetInfo.freeze_panes = 'A2'   # 点到A2单元格然后按冻结窗口
sheetInfo.row_dimensions.group(11, 13, 1, True)  # 隐藏11到13行
'''
    单元格样式修改
单元格对象.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)    # 查看单元格字体大小 ---> 11.0
for i in sheetInfo['C']:          # 返回B列,用for循环,修改多行多列的数据
    # 设置字体格式: 修改字体,修改字号,字体加粗,字体颜色
    i.font = openpyxl.styles.Font(name="微软雅黑", size=20, bold=True, italic=True, color="0000FF")
    # 设置单元格填充颜色。 白色#FFFFFF ; 黑色#000000; 红色#FF0000; 绿色#00FF00 ; 蓝色#0000FF ; 黄色#FFFF00
    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     # 设置第1行的高度
sheetInfo.column_dimensions['B'].width = 20     # 设置B列的宽度
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) - 差异化样式设置。
'''
# 单元格规则:在Excel中要对单元格进行突出显示设置,先选中需要设置的单元格,然后依次点击“开始”选项卡中的“条件格式>突出显示单元格”命令,选择要设置的条件,满足条件的单元格会被突出显示。
rule1 = CellIsRule(operator='between', formula=[20, 23], fill=PatternFill(end_color='FFFF2100'))  # 在20与23之间
sheetInfo.conditional_formatting.add('C2:C6', rule1)
# 数据条:在Excel中,如果要对数据进行数据条格式的设置,则先选中需要设置的单元格,然后依次点击“开始”选项卡中的“条件格式>数据条”命令,在弹出的下拉菜单中选择需要的样式。
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)    # E1=10的条件格式
# 差异化样式设置DifferentialStyle
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)   # 单元格包含文本【AA】时的条件格式,如果单元格包含【AA】值为True,反之,为False

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')    # 保存至文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值