python操作excel样式之openpyxl

import openpyxl

from openpyxl.chart.series import Series

from openpyxl.styles import Font,Alignment,NamedStyle,PatternFill

from openpyxl.chart import BarChart,Reference

# 可以参考: https://blog.csdn.net/xiaomage0511/article/details/124166836

wb = openpyxl.load_workbook(filename="test02.xlsx")

sheet = wb.get_sheet_by_name('Sheet1')

sheet['A3'] = 'bobo'

# 设置字体,name表示字体如:宋体,color必须是16进制的argb ,sz表示大小,b表示加粗,i表示斜体

f = Font(name="MV Boli",sz=14,b=True,i=True,color="6d2f2a")

# sheet['A3'].font = f #可以单独去设置,那就不需要去设置style

# sheet = wb.active

# cell = sheet.cell()

# 对齐方式,horizontal水平对齐

a = Alignment(horizontal="right")

# sheet['A3'].alignment = a #可以单独去赋值

# 背景填充

p = PatternFill(patternType="solid",fgColor="e03814")

# sheet['A3'].fill = p

# 公式计算,跟写入数据一样的,但是读取的时候需要设置在 load_workbook中设置read_only=True

sheet['E2'] = '=SUM(B2:C2)'

# 添加筛选

# sheet.auto_filter.ref = "A1:C1" # 添加筛选的表头

# sheet.auto_filter.add_filter_column(1,[10,20]) # 添加筛选列对应的值

# sheet.auto_filter.add_filter_column(0,["王新"])

# 排序 ref指定排序、过滤的范围 ,目前有bug,需要人为的手工去确认保存下

sheet.auto_filter.ref = "A1:C6"

sheet.auto_filter.add_sort_condition("B2:B6", descending=True)

# 设置列宽度和行高 row_dimensions 返回一个字典,key为行号

sheet.row_dimensions[1].height=50

sheet.column_dimensions["A"].width=100

# 单元格的拆分和合并

sheet.merge_cells("D1:F6")

sheet["D1"]=30 # 给左上角的赋值

print(sheet["D1"].value) # 为 30

print(sheet["D2"].value) # 为 None

sheet.unmerge_cells("D1:F6")

# 冻结窗格

"""

在 OpenPyXL 中,每个 Worksheet 对象都有一个 freeze_panes 属性,可以设置为一个 Cell 对象或一个单元格坐标的字符串。

请注意,单元格上边的所有行和左边的所有列都会冻结,但单元格所在的行和列不会冻结

"""

sheet.freeze_panes = "A2" # 冻结第一行

# 解冻结 sheet.freeze_panes = "A1" 或者None

sheet.freeze_panes = None

# 创建柱状图

# sheet = wb.active

chart1= BarChart()

chart1.type = "col" # 设置图表属性,type 为 col 为列状图,bar 为水平图

chart1.title = "销量柱状图"

chart1.y_axis.title = '序号'

chart1.x_axis.title = '年龄和身高'

data = Reference(worksheet=sheet,min_row=1,max_row=6,min_col=1,max_col=3) # 取出数据范围

chart1.add_data(data,titles_from_data=True)

series = Reference(sheet, min_col=4, min_row=2, max_row=6) # 设置横坐标的值,如果只设置min_col则,max_col=min_col

chart1.set_categories(series)

sheet.add_chart(chart1, "A10")

# style相当于是对 Font,Alignment,PatternFill等的一个整合

# 将上方的字体,背景,对齐方式整合到一起

s = NamedStyle(font=f,alignment=a,fill=p)

sheet['A3'].style = s

wb.save('test02_style.xlsx')

你可能感兴趣的:(python,excel,开发语言)