51aaeb5917f99ddf63872eba1fea9087.gif

在后台回复【阅读书籍】

即可获取python相关电子书~

Hi,我是山月。

之前给大家分享了openpyxl的基础教程:Python自动化办公:openpyxl教程(基础)。不知道大家学习的怎么样了。

今天给大家分享一下整理了一周的openpyxl进阶教程。

全文一共16000+字,包括了:批注、表格、条件格式、公式、筛选和排序、验证单元格、定义名称、分级显示、设置九个部分。

其中由于数据透视表和图表创建篇幅较长、难度较大,会在之后给他们两个分别写篇教程。

在这之前,必须重新把官网摆一次。官网+help函数+dir函数简直是学习的好帮手。

👉 dir函数:新手到大师的进阶之路

👉 官网:https://openpyxl.readthedocs.io/en/stable/

下面我们一起来看吧。

01

批注

1、导入

from openpyxl.comments import Comment
Comment(text, author, height=79, width=144)

参数说明:

text     # 批注的内容,必填
author   # 批注的作者,必填。
height   # 批注框高,默认79。
width    # 批注框宽,默认144。

2、实例

from openpyxl import Workbook
from openpyxl.comments import Comment

wb = Workbook()
ws = wb.active

ws["A1"] = '默认'
ws["B2"] = '批注'
ws["C3"] = '批注'

#在B2单元格设置批注
comment_B2 = Comment('这是默认的批注', '山月')
ws["B2"].comment = comment_B2

#在C3单元格设置批注
ws["C3"].comment = Comment('设置了高宽', '山月', height=50, width=80)

# 获取批注的信息
print(comment_B2.text)     # 获取B2单元格批注的内容,结果--->>>这是默认的批注
print(comment_B2.author)   # 获取B2单元格批注的作者,结果--->>>山月

wb.save('实例.xlsx')

效果:

23e4ad99c68ef821de919e861deb493c.png

02

表格

1、创建表

1)表格样式设置

name:样式名称
'''
可选项:
"TableStyleMedium1" - "TableStyleMedium28"
"TableStyleLight1" - "TableStyleLight21"
"TableStyleDark1" - "TableStyleDark11"
'''

showRowStripes=True:显示镶边行
showColumnStripes=True:显示镶边列
showFirstColumn=True:显示表格中第一列的特殊格式
showLastColumn=True:显示表格中最后一列的特殊格式

样式名称对应的样式:

021bc213307ab3af58db68db128488cc.png

2)实例

from openpyxl import Workbook
from openpyxl.worksheet.table import Table, TableStyleInfo

wb = Workbook()
ws = wb.active

data = [
    ["Fruit", "2011", "2012", "2013", "2014"],
    ['Apples', 10000, 5000, 8000, 6000],
    ['Pears',   2000, 3000, 4000, 5000],
    ['Bananas', 6000, 6000, 6500, 6000],
    ['Oranges',  500,  300,  200,  700],
]

# 在表中写入数据
for row in data:
    ws.append(row)

tab = Table(displayName="Table1", ref="A1:E5")  # 表名称和数据区域
# tab.headerRowCount = False   # 省略标题行。如果不省略,标题行数据默认是第一行,注意标题行数据必须得是字符串,否则会报错。

# 设置表样式
style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False,
                       showLastColumn=False, showRowStripes=False, showColumnStripes=False)
tab.tableStyleInfo = style

ws.add_table(tab) # 添加表

wb.save("实例.xlsx")

效果:

108d745b33ac5d48c611a3829aa324e6.png

2、操作表

#获取所有表信息
ws.tables
#获取指定表信息
ws.tables["Table1"] #Table1为表名称
#遍历所有表信息
for table in ws.tables.values():
   print(table)

#获取工作表中所有表的表名和范围
ws.tables.items()   
#遍历表中表名
for table in ws.tables:
   print(table)

#删除表
del ws.tables["Table1"] #Table1为表名称

#返回工作表中的表数
len(ws.tables)

03

条件格式

Excel支持三种不同类型的条件格式:内置、标准和自定义

  • 内置的条件格式将特定的规则与预定义的样式相结合;

  • 标准条件格式将特定规则与自定义格式相结合;

  • 自定义格式将自定义的规则与自定义格式相结合。

1、格式的使用

1)创建使用规则

e3d37e5d8f739238fa2500e12f05634f.png

2)使用规则

worksheet.conditional_formatting.add(range_string, cfRule) 

参数说明:
range_string:应用条件格式的单元格区域
cfRule:要应用的条件格式规则

2、内置格式

内置条件格式有:ColorScale(色阶),IconSet(图标集),DataBar(数据条)。

其中三种内置格式里的参数cfvo是一个由【openpyxl.formatting.rule.FormatObject】对象组成的序列(列表或元组)。

FormatObject对象的语法:

from openpyxl.formatting.rule import FormatObject
FormatObject(type, val=None, gte=None, extLst=None)

参数:
val:值,是个浮点型
type:可选项有:百分比(percent),最小值(min),百分点值(percentile),公式(formula),最大值(max),数字(num)

1、ColorScale

色阶作为一种直观的指示,可以帮助了解数据分布和数据变化。

有两种选择:

  • 双色刻度:使用两种颜色的渐变来帮助您比较单元格区域。颜色的深浅表示值的高低。

  • 三色刻度:使用三种颜色的渐变来帮助您比较单元格区域。颜色的深浅表示值的高、中、低。

1)语法

# 1)通过ColorScale创建ColorScale规则
from openpyxl.formatting.rule import ColorScale
ColorScale(cfvo=None, color=None) #创建色阶

# 2)通过ColorScaleRule创建使用ColorScale规则
from openpyxl.formatting.rule import ColorScaleRule
ColorScaleRule(start_type=None, start_value=None, start_color=None, mid_type=None, mid_value=None, mid_color=None, end_type=None, end_value=None, end_color=None)

2)实例

from openpyxl import Workbook
from openpyxl.formatting.rule import ColorScale, FormatObject
from openpyxl.formatting.rule import Rule
from openpyxl.styles import Color

wb = Workbook()
ws = wb.active

first = FormatObject(type='min')
last = FormatObject(type='max')

# 创建双色刻度
colors = [Color('EE1111'), Color('00AA00')]
cs2 = ColorScale(cfvo=[first, last], color=colors)

# 创建三色刻度
mid = FormatObject(type='num' , val=40)
colors.insert(1, Color('0000AA'))
cs3 = ColorScale(cfvo=[first, mid, last], color=colors)

#创建使用双色刻度的规则
rule = Rule(type='colorScale', colorScale=cs2)
ws.conditional_formatting.add('A1:A10', rule) #应用规则

#创建使用三色刻度的规则
rule = Rule(type='colorScale', colorScale=cs3)
ws.conditional_formatting.add('B1:B10', rule) #应用规则

wb.save("实例.xlsx")

等同于:

from openpyxl import Workbook
from openpyxl.formatting.rule import ColorScaleRule

wb = Workbook()
ws = wb.active

# 创建使用双色刻度
ws.conditional_formatting.add('A1:A10',
            ColorScaleRule(start_type='min', start_color='EE1111',
                          end_type='max', end_color='00AA00')
                          )

# 创建使用三色刻度
ws.conditional_formatting.add('B1:B10',
               ColorScaleRule(start_type='min', start_color='EE1111',
                           mid_type='num', mid_value=40, mid_color='0000AA',
                           end_type='max', end_color='00AA00')
                             )

wb.save("实例.xlsx")

效果:

cc6b75efb68b5e32a012d3825ffa96e9.png

2、IconSet

使用图标集可以对数据进行注释,并可以按阈值将数据分为三到五个类别。 每个图标代表一个值的范围。

例如,在三向箭头图标集中,绿色的上箭头代表较高值,黄色的横向箭头代表中间值,红色的下箭头代表较低值。

图标集名称:注意图标集名称前的数字是说这个图标集有几个图标,想设置含几个图标的图标集就得把数据分为几个类别。

79d484ca8a51d564518cd9a8f918ad08.png

1)语法

# 1)通过 IconSet创建IconSet 规则
from openpyxl.formatting.rule import IconSet
classopenpyxl.formatting.rule.IconSet(iconSet=None, showValue=None, percent=None, reverse=None, cfvo=None) #创建IconSet
'''
iconSet可选项:4Rating,3Symbols,3Symbols2,4ArrowsGray,5ArrowsGray,
5Arrows,3TrafficLights2,3ArrowsGray,3TrafficLights1,5Rating,
3Signs,3Flags,3Arrows,4RedToBlack,4TrafficLights,5Quarters,4Arrows
'''

# 2)通过IconSetRule创建使用IconSet规则
from openpyxl.formatting.rule import IconSetRule
IconSetRule(icon_style=None, type=None, values=None, showValue=None, percent=None, reverse=None)

2)实例

from openpyxl import Workbook
from openpyxl.formatting.rule import IconSet, FormatObject
from openpyxl.formatting.rule import Rule

wb = Workbook()
ws = wb.active

# 创建一个3图标的图标集
first = FormatObject(type='num', val=0)
second = FormatObject(type='num', val=33)
third = FormatObject(type='num', val=67)
iconset = IconSet(iconSet='3Arrows', cfvo=[first, second, third])

# 将图标集赋给规则
rule = Rule(type='iconSet', iconSet=iconset)
ws.conditional_formatting.add('A1:A10', rule) #应用规则

wb.save("实例.xlsx")

等同于:

from openpyxl import Workbook
from openpyxl.formatting.rule import IconSetRule

wb = Workbook()
ws = wb.active

# 创建+使用图标集
ws.conditional_formatting.add('A1:A10',
                        IconSetRule(icon_style='3Arrows', type='num', values=[0, 33, 67]))

wb.save("实例.xlsx")

效果:

8756608d25ec404f645f1198b1a508ce.png

3、DataBar

数据条可帮助查看某个单元格相对于其他单元格的值。

数据条的长度代表单元格中的值。 数据条越长,表示值越高,数据条越短,表示值越低。

1)语法

#通过DataBar创建DataBar规则
from openpyxl.formatting.rule import DataBar
DataBar(minLength=None, maxLength=None, showValue=None, cfvo=None, color=None)


#通过DataBarRule创建使用DataBar规则
from openpyxl.formatting.rule import DataBarRule
DataBarRule(start_type=None, start_value=None, end_type=None, end_value=None, color=None, showValue=None, minLength=None, maxLength=None)

2)实例

from openpyxl import Workbook
from openpyxl.formatting.rule import DataBar, FormatObject
from openpyxl.formatting.rule import Rule

wb = Workbook()
ws = wb.active

# 创建数据条
first = FormatObject(type='min')
second = FormatObject(type='max')
data_bar = DataBar(cfvo=[first, second], color="638EC6")

#将数据条赋给规则
rule = Rule(type='dataBar', dataBar=data_bar)
ws.conditional_formatting.add('A1:A10', rule) #应用规则

wb.save("实例.xlsx")

等同于:

from openpyxl import Workbook
from openpyxl.formatting.rule import DataBarRule

wb = Workbook()
ws = wb.active

#创建使用数据条
ws.conditional_formatting.add('A1:A10',
                    DataBarRule(start_type='min', end_type='max', color="638EC6"))

wb.save("实例.xlsx")

效果:

283fc41fde1133044563f53e907c80b1.png

3、标准条件格式

标准条件格式有:

  • Average:平均值

  • Percent:百分比

  • Unique or duplicate:唯一值或重复值

  • Value:值

  • Rank:排名

1、CellIsRule

基于单元格内容设置条件格式规则。

1)语法

from openpyxl.formatting.rule import CellIsRule
CellIsRule(operator=None, formula=None, stopIfTrue=None, font=None, border=None, fill=None)

2)实例

from openpyxl import Workbook
from openpyxl.styles import PatternFill
from openpyxl.formatting.rule import CellIsRule

wb = Workbook()
ws = wb.active

# 创建填充
redFill = PatternFill(start_color='EE1111',end_color='EE1111',fill_type='solid')

# 单元格小于C1的值的条件格式
ws.conditional_formatting.add('B2:B10',
            CellIsRule(operator='lessThan', formula=['B$1'], stopIfTrue=True, fill=redFill))

# 单元格介于1-5之间的条件格式
ws.conditional_formatting.add('D2:D10',
            CellIsRule(operator='between', formula=['1','5'], stopIfTrue=True, fill=redFill))

wb.save("实例.xlsx")

效果:

fcff732cee229bf1e4a375087d6bb862.png

2、FormulaRule

基于公式设置条件格式规则。

1)语法

from openpyxl.formatting.rule import FormulaRule
FormulaRule(formula=None, stopIfTrue=None, font=None, border=None, fill=None)

2)实例

from openpyxl import Workbook
from openpyxl.styles import PatternFill
from openpyxl.formatting.rule import FormulaRule

wb = Workbook()
ws = wb.active

# 创建填充
redFill = PatternFill(start_color='EE1111',end_color='EE1111',fill_type='solid')

# B1为空白的条件格式
ws.conditional_formatting.add('B2:B10',
            FormulaRule(formula=['ISBLANK(B$1)'], stopIfTrue=True, fill=redFill))

# D1=0的条件格式
ws.conditional_formatting.add('D2:D10',
            FormulaRule(formula=['D$1=0'], fill=redFill))

wb.save("实例.xlsx")

效果:

cbdc49489c907c52c5c23cbace28475b.png

3、DifferentialStyle

差异化样式设置。

1)语法

from openpyxl.styles.differential import DifferentialStyle
DifferentialStyle(font=None, numFmt=None, fill=None, alignment=None, border=None, protection=None, extLst=None)

2)实例

from openpyxl import Workbook
from openpyxl.formatting import Rule
from openpyxl.styles import PatternFill, Font
from openpyxl.styles.differential import DifferentialStyle

wb = Workbook()
ws = wb.active

# 创建字体、填充格式
red_text = Font(bold=True)
red_fill = PatternFill(bgColor="EE1111")

# 单元格包含文本【light】时的条件格式
dxf = DifferentialStyle(font=red_text, fill=red_fill)
rule = Rule(type="containsText", operator="containsText", text="light", dxf=dxf)
rule.formula = ['NOT(ISERROR(SEARCH("light",A1)))'] #如果单元格包含【light】值为True,反之,为False
ws.conditional_formatting.add('A1:F10', rule)

wb.save("实例.xlsx")

效果:

8317d76035a23d131e9727076eee733f.png

04

公式

1、openpyxl支持的公式

查看openpyxl支持写的excel 函数公式:

from openpyxl import load_workbook
from openpyxl.utils import FORMULAE
print(FORMULAE)

结果:

cf97a4e665b625d1ec8f5d5965884f2e.png

2、解析公式

1、Tokenizer

Excel工作表公式的标记器。将表示Excel公式的str字符串转换为“Token”对象序列。

1、语法

Tokenizer(formula)

说明:

formula:要标记化的公式,字符串格式。

标记器定义了一个方法【._parse()】将公式解析为标记,然后可以通过【.items】访问这些标记。

【.items】返回的是一个Token对象序列,Token对象有三个属性:

1).value:产生此标记的公式的子字符串。

2).type: 表示的标记类型, 可以是:

1a84eeac7100c719813787c63490c959.png

3).subtype:上面的一些标记类型使用子类型来提供关于标记的额外信息。可能的子类型有:

49d3b170a96eebce778b5e7c54bc6bef.png

2、实例

from openpyxl.formula import Tokenizer
tok = Tokenizer("=IF($A$1,'then True',MAX(DEFAULT_VAL,'Sheet 2'!B1))")
print("\n".join("%12s%11s%9s" % (t.value, t.type, t.subtype) for t in tok.items))

结果:

23d5783cb35719dab2b7bad8c8ca298e.png

2、Translator

将公式从一个位置转移到另一个位置

1、语法

Translator(formula, origin)
'''
定义的方法:
get_tokens(self)
translate_formula(self, dest=None, row_delta=0, col_delta=0)
'''

2、实例

from openpyxl import Workbook
from openpyxl.formula.translate import Translator

wb = Workbook()
ws = wb.active
ws['F2'] = "=SUM(B2:E2)"

# 将一列公式向右移动
ws['G2'] = Translator("=SUM(B2:E2)", origin="F2").translate_formula("G2")

move_results = ws['G2'].value
print(move_results)   # --->>> =SUM(C2:F2)

05

筛选和排序

注意:只会将相关指令添加到文件中,不会实际过滤或排序。

1、语法

AutoFilter(ref=None, filterColumn=(), sortState=None, extLst=None)

'''
ref (string):筛选排序的 单元格范围

方法:
add_filter_column(col_id, vals, blank=False)
 #为指定列添加筛选
 col_id (int) : 0表示第一列
 vals (str[]): 要显示的值列表
 blank (bool) : 如果为 True,则显示具有空白单元格的行(默认 =``False``)
  
add_sort_condition(ref, descending=False)
 #为指定的单元格范围添加排序条件
 ref (string): 单元格范围
 descending (bool): 是否降序排序,默认为False,也就是升序排序。True:降序排序
'''

2、实例

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

data = [
    ["Fruit", "Quantity"],
    ["Kiwi", 3],
    ["Grape", 15],
    ["Apple", 3],
    ["Peach", 3],
    ["Pomegranate", 3],
    ["Pear", 3],
    ["Tangerine", 3],
    ["Blueberry", 3],
    ["Mango", 3],
    ["Watermelon", 3],
    ["Blackberry", 3],
    ["Orange", 3],
    ["Raspberry", 3],
    ["Banana", 3]
]

# 按行写入数据
for r in data:
    ws.append(r)

# 设置筛选排序的单元格区域
ws.auto_filter.ref = "A1:B15"

# 筛选第1列里值是Kiwi/Apple/Mango的
ws.auto_filter.add_filter_column(0, ["Kiwi", "Apple", "Mango"])

# 按B列的值升序排序
ws.auto_filter.add_sort_condition("B2:B15")

wb.save("实例.xlsx")

效果:

edf87d450afc9340fb2e48ac70bb0240.png

06

验证单元格

1、语法

87f61cb0f94ab42989c1a579230903b0.png

2、实例

from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation

# 创建我们将使用的工作簿和工作表
wb = Workbook()
ws = wb.active

# 使用列表验证创建数据验证对象
dv = DataValidation(type="list", formula1='"Dog,Cat,Bat"', allow_blank=True)

# 出错警告
dv.error ='您的条目不在列表中'  # 错误信息
dv.errorTitle = '无效条目'  # 标题

# 输入信息
dv.prompt = '请从列表中选择一个值'   # 输入信息
dv.promptTitle = '值输入'   # 标题

# 将数据验证对象添加到工作表中
ws.add_data_validation(dv)

# 创建一个单元格,并将它们添加到数据验证对象中
c1 = ws["A1"]
c1.value = "Dog"
dv.add(c1)

# 将验证应用于一系列单元格
dv.add('B1:B1048576') # 这与整个B列相同

wb.save('实例.xlsx')

效果:

1aa56d902799d54653cec6df7ee70c3b.gif

3、其他验证示例

任意整数:
dv = DataValidation(type="whole")

任何大于 100 的整数:
dv = DataValidation(type="whole",
                    operator="greaterThan",
                    formula1=100)
                    
任何十进制数:
dv = DataValidation(type="decimal")

0 到 1 之间的任何十进制数:
dv = DataValidation(type="decimal",
                    operator="between",
                    formula1=0,
                    formula2=1)

任何日期:
dv = DataValidation(type="date")

任何时间:
dv = DataValidation(type="time")

最多 15 个字符的任意字符串:
dv = DataValidation(type="textLength",
                    operator="lessThanOrEqual"),
                    formula1=15)

单元格范围验证:
from openpyxl.utils import quote_sheetname
dv = DataValidation(type="list",
                    formula1="{0}!$B$1:$B$10".format(quote_sheetname(sheetname))
                    )

自定义规则:
dv = DataValidation(type="custom",
                    formula1"=SOMEFORMULA")

07

定义名称

可为单元格区域、函数、常量或表格定义名称。

一旦采用了在工作簿中使用名称的做法,便可轻松地更新、审核和管理这些名称。

1、语法

56179fee65b51e5b0c1ec674247cfeb5.png

2、实例

import openpyxl
from openpyxl.workbook.defined_name import DefinedName

wb = openpyxl.Workbook()
ws=wb.active

ws["A1"] = 5 # 在A1写入5

# 为A1单元格创建名称:test
sheetid = wb.sheetnames.index('Sheet')
test_definedname = DefinedName('test', attr_text='Sheet!$A$1', localSheetId=sheetid)
wb.defined_names.append(test_definedname)

ws["C3"] = "=test"      #使用名称test

# 获取名称信息
print(wb.defined_names.localnames(sheetid)) # 返回--->> ['test']
print(wb.defined_names.get('test', sheetid).attr_text) # 返回--->> Sheet!$A$1

definedname_results = test_definedname.destinations  # test_definedname.destinations:返回(工作表标题、单元格范围)元组的生成器
print(list(definedname_results)) # 返回--->> [('Sheet', '$A$1')]

wb.save('实例.xlsx')

效果:

c75c0febcfec83667122f613114f26b2.png

08

分级显示

可创建行的分级显示、列的分级显示或者行和列的分级显示。

1、语法

#  行的分级显示
worksheet.row_dimensions

# 列的分级显示
worksheet.column_dimensions

# 行/列分级显示的方法
group(start, end=None, outline_level=1, hidden=False)
'''
start :要分组的第一行或第一列(强制)
end :要分组的最后一行或最后一列(可选,默认开始)
outline_level :大纲级别
hidden :该组是否应该隐藏在打开的工作簿上
'''

2、实例

import openpyxl
wb = openpyxl.Workbook()
ws = wb.active

ws.column_dimensions.group('A','D', hidden=True)  # 列分组
ws.row_dimensions.group(1,10, hidden=True) #行分组

wb.save('实例.xlsx')

效果:

4c905af8f0e6f7c4259bc2ff51bcc8bf.png

09

设置

1、冻结窗格设置

ws.freeze_panes = 'B1'  # 冻结首列
ws.freeze_panes = 'A2'  # 冻结首行
ws.freeze_panes = 'B2'  # 冻结首行与首列

2、页面设置

ws.page_setup.orientation = 'landscape'    # 纸张方向:'landscape:横向', 'default:默认', 'portrait:纵向'

ws.page_setup.paperSize = ws.PAPERSIZE_A3  # 纸张大小设置成A3
'''
设置成A3大小也可以这样:ws.page_setup.paperSize ='8'
其它纸张大小设置选项:
  信纸:ws.PAPERSIZE_LETTER/'1'
  Tabloid:ws.PAPERSIZE_TABLOID / '3'
  法律专用纸:ws.PAPERSIZE_LEGAL / '5' 
  Statement:ws.PAPERSIZE_STATEMENT/'6'
  Executive:ws.PAPERSIZE_EXECUTIVE / '7'
  A3:ws.PAPERSIZE_A3/'8'
  A4:ws.PAPERSIZE_A4/'9'
  A5:ws.PAPERSIZE_A5 / '11'
  B4(JIS):'12'
  B5(JIS):'13'
'''

ws.page_setup.fitToHeight = 2   # 缩放的页高
ws.page_setup.fitToWidth = 2    # 缩放的页宽
ws.page_setup.draft = True  # 草稿品质,默认False。设置:True
ws.page_setup.scale = 70   # 设置缩放比例,比如值是70则为缩放70%
ws.page_setup.blackAndWhite = True # 设置单色打印,默认False,设置True

ws.page_setup.pageOrder= 'overThenDown'  # 打印顺序设置,可设置项:'overThenDown(先行后列)', 'downThenOver(先列后行)'

ws.page_setup.cellComments = 'asDisplayed'  # 设置批注,默认无。可设置值: 'asDisplayed:如同工作表中的显示', 'atEnd:工作表末尾'

ws.page_setup.useFirstPageNumber = True  # 启动起始页码设置
ws.page_setup.firstPageNumber = 2   # 起始页码设置为2.注意首先要设置useFirstPageNumber为True

ws.page_setup.usePrinterDefaults = True  # 启动错误单元格打印
ws.page_setup.errors = 'dash'    #  错误单元格打印的选项:'NA'(#N/A), 'dash'(--), 'displayed'(显示值), 'blank'(空白)。要先启动错误单元格打印

ws.page_setup.fitToPage = True  #   缩放设置为【调整为】
ws.page_setup.fitToHeight = 2   #   缩放的页高,缩放要先设置为【调整为】
ws.page_setup.fitToWidth = 2    #   缩放的页宽,缩放要先设置为【调整为】

3、视图设置

ws.sheet_view.showGridLines = False  #隐藏网格线
ws.sheet_view.showRowColHeaders= False  # 隐藏行号、列标
ws.sheet_view.zoomScale = 80    # 缩放比例设置
ws.sheet_view.zoomScaleSheetLayoutView = 70  # 分页预览缩放比例,范围:10-400
ws.sheet_view.zoomScalePageLayoutView = 90 # 页面布局缩放比例
ws.sheet_view.rightToLeft = True    # 设置从右向左
ws.sheet_view.showFormulas = True   # 显示公式
ws.sheet_view.showZeros = False     # 0值不显示
ws.sheet_view.topLeftCell = 'B3'    # 左上角单元格设置。注意,不会删除之前的单元格
ws.sheet_view.showRuler = False     # 页眉布局视图下不显示标尺,默认显示
ws.sheet_view.view = 'normal'   # 视图设置。默认普通视图:'normal':普通视图, 'pageBreakPreview':分页预览视图, 'pageLayout':页眉布局视图
ws.sheet_view.windowProtection = True   # 是否设置窗口保护,默认不设置。设置了之后【视图】选项卡里的新建/冻结/拆分窗口不能使用
ws.sheet_view.showOutlineSymbols = True     # 显示大纲符号

ws.sheet_view.defaultGridColor = False  # 网格线颜色是否设置成默认
ws.sheet_view.colorId = 5   # 网格线颜色设置,范围:0-63。如果要生效,得把默认网格线颜色设置成False

#拆分设置
ws.sheet_view.pane = 【openpyxl.worksheet.views.Pane】对象
'''
Pane对象语法:
from openpyxl.worksheet.views import Pane
Pane(xSplit=None, ySplit=None, topLeftCell=None, activePane='topLeft', state='split')
'''

4、打印设置

#居中方式设置
ws.print_options.horizontalCentered = True  # 设置水平居中方式
ws.print_options.verticalCentered = True    # 设置垂直居中方式

#页眉和页脚设置,比如设置左页眉
ws.oddHeader.left.text = "Page &[Page] of &N"   # 格式为:Page &[页码] of &[总页数]
ws.oddHeader.left.size = 14         # 14字号
ws.oddHeader.left.font = "Tahoma,Bold"      # 字体Tahoma,加粗
ws.oddHeader.left.color = "CC3366"      # 颜色设置

#打印标题
ws.print_title_cols = 'A:B' # 左端标题列
ws.print_title_rows = '1:1' # 顶端标题行

#打印区域
ws.print_area ="A1:F10"

5、日期、时间设置

在XLSX文件中,日期和时间可以用两种不同的方式来存储:ISO 8601格式的字符串、单个数字。

1、ISO 8601格式

如果你想在openpyxl 写入文件时以 ISO 8601 格式存储日期和时间,可以将工作簿的 iso_dates 标志设置为 True。

workbook.iso_dates = True

2、1900 和 1904 日期系统

XLSX 文件的日期系统决定了如何解释单个数字表示的日期和时间。

XLSX 文件有两种日期系统:

  • 在 1900 日期系统(默认)中,参考日期(编号为 1)是 1900-01-01。

  • 在 1904 日期系统中,参考日期(编号为 0)是 1904-01-01。

获得/更改工作簿的日期系统:

import openpyxl
wb = openpyxl.Workbook()
if wb.epoch == openpyxl.utils.datetime.CALENDAR_WINDOWS_1900:
    print("工作薄默认使用的是 1900 日期系统")

# 将其设置为1904日期系统:
wb.epoch = openpyxl.utils.datetime.CALENDAR_MAC_1904

完结撒花🌸🌸🌸

祝大家学习愉快。如果觉得对你有所帮助的话,希望能分享给更多人。

已经到底啦~(≧▽≦*)/~

84695bbe90110fa74d25f7c22c686f27.png 往 期 推 荐 8a1fd691b4b589667cae1eb23416ab4f.png

Python自动化办公:openpyxl教程(基础)

2022-01-18

c11585951c4c50da7f498e1c55310ea4.png

如何用Python做日历?

2022-01-10

cef07b24913943a385a21dd88fbcb9e1.png

Python实战:个人贷款计算

2022-01-14

c4ccb82cff7e2d00ac181543bc93181e.png

年会将近?赶紧学学如何用Python做个抽奖界面

2022-01-02

3a3a9a2590a4b8bfec78fcb3c75d23e8.png

504d33600bf1da6ff8822b5e4cff0086.gif

您的“点赞”、“在看”和 “分享”是我们产出的动力。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐