openpyxl操作excel的基本方法

官方指南:https://openpyxl.readthedocs.io/en/stable/styles.html

基本文件操作

#创建新的xlsx文件

import openpyxl
#创建工作簿
wb = openpyxl.Workbook()
#工作簿总是会带有至少一个worksheet,通过Workbook.active可以选中第一个sheet
ws = wb.active
#保存文件(会覆盖已有文件而且没有任何提示)
wb.save('sample.xlsx')

#打开已有xlsx文件

wb2 = load_workbook('test.xlsx')

#保存模板

wb = load_workbook('document.xlsx')
wb.template = True
wb.save('document_template.xltx')

#关闭Workbook

wb.close()

sheet操作

#创建sheet: Workbook.create_sheet(),不带参数创建会使用sheet1这样的名称,并且sheet默认是追加到末尾

ws1 = wb.create_sheet()
#也可以在创建的时候指定sheet的名称或者位置(位置表示数值和list[]使用很类似),例如:
ws2 = wb.create_sheet('Mysheet1',0)
ws3 = wb.create_sheet('Mysheet2',-1)

#修改已有的sheet名称

ws3.title = 'New Title'

#设置sheet页签背景,(默认是白色), 设置属性Worksheet.sheet_properties.tabColor, 颜色是以"RRGGBB"的格式描述

ws3.sheet_properties.tabColor = "1072BA"

#引用sheet,如果知道sheet的名称,可以直接通过workbook获取,查看所有的sheet,可以通过WorkBook.sheetnames获取

ws3 = wb['Sheet1']

#复制sheet

source = wb.active
target = wb.copy_worksheet(sourrce)

 

数据操作/单元格操作

#获取单元格和其值

c = ws['A4']
c.value

#指定单元的值

ws['A1'] = 42

#通过Worksheet.cell()以row和column的方式访问。默认创建的sheet是没有任何内容的,当访问cell的时候,这个cell才会被创建,所以如果cell方法不带alue值,则会在指定的row-column创建一个空的单元格

d = ws.cell(row=4, column=2, value=10)

#范围访问单元格(通过指定左上角和右下角的单元个位置),返回一个按照行/列分布的元组

cell_range = ws['A1':'C2']

#获取指定列中的所有单元格(一直到没有创建的单元格为止)

colC = ws['C']
col_range = ws['C':'D']

#获取指定行中的所有单元格()

row10 = ws[10]
row_range = ws[5:10]

#通过Worksheet.iter_rows()指定获取的行范围和列宽

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
... for cell in row:
... print(cell)

#类似的方法Worksheet.iter_cols(),差别在于iter_rows先横向取行,iter_cols先纵向取列(官方:这个方法在只读模式下不可用)

for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
... for cell in col:
... print(cell)

#还有一种方法可以取到所有的行或者列(官方:在只读模式下Worksheet.columns不可用)

tuple(ws.rows)
tuple(ws.columns)

#获取所有数据

for row in ws.values:
for value in row:
print(value)
#Worksheet.iter_rows() 和 Worksheet.iter_cols()也支持只获取值
ws.iter_rows(min_row=1, max_col=3, max_row=2, value_only=True)

#通过获取单元对象写入数据

c.value = 'hello, world'

#合并/取消合并

ws.merge_cells('A2:D2')
ws.unmerge_cells('A2:D2')
#或者
ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)

插入图片

wb = openpyxl.Workbook()
ws = wb.active
ws['A1'] = 'You should see three logos below'
img = openpyxl.drawing.image.Image('logo.png')
ws.add_image(img,'A1')
wb.save('logo.xlsx')

样式

定义字体样式

ft = openpyxl.styles.Font(color=openpyxl.styles.colors.RED)
ft = openpyxl.styles.Font(color='FFBB00')
ft = openpyxl.styles.Font(color=openpyxl.styles.colors.Color(indexed=32))
ft = openpyxl.styles.Font(color=openpyxl.styles.colors.Color(theme=6, tint=0.5))

#复制样式
ft2 = copy(ft)

定义边框样式

thin = openpyxl.styles.Side(border_style="thin", color="000000")
double = openpyxl.styles.Side(border_style="double", color="ff0000")
bd = openpyxl.styles.Border(top=double, left=thin, right=thin, bottom=double)

设置边框和字体颜色样式

a1 = ws['A1']
a1.font = ft
a1.border = bd

a1.fill = openpyxl.styles.PatternFill("solid", fgColor="DDDDDD")
a1.fill = openpyxl.styles.GradientFill(stop=("000000", "FFFFFF"))

命名样式

from openpyxl.styles import NamedStyle, Font, Border, Side
highlight = NamedStyle(name="highlight")
highlight.font = Font(bold=True, size=20)
bd = Side(style='thick', color="000000")
highlight.border = Border(left=bd, top=bd, right=bd, bottom=bd)

wb.add_named_style(highlight)

a1.style=highlight
a1.style='highlight'

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据