python-excel文件处理-openpyxl模块

工作中我们会经常对excel文件进行处理,比如常见的整理数据、提交报表;你是否因为经常复制粘贴而感觉枯燥,那么你可以尝试通过python对excel文件进行处理,来加快工作效率,减少枯燥而重复的工作。。。

我又开始一本正经的胡说八道了。。

正文开始:

对excel文件的操作一般有很多,我们简单的从操作上把它分为三部分:读,写,处理格式;其实你也没必要刻意去记,大致知道怎么用,用的时候对象后面跟个点。,pycharm会自动列出很多方法,根据方法名选择你想要的;或者知道大体怎么用,到时再查资料都是可以的。

0. 准备条件,安装openpyxl;

  pip install openpyxl

1. 读取excel文件:

大致分五步:读文件>>>获取sheet>>>选择sheet>>>单元格定位>>>输出单元格的值

from openpyxl import load_workbook

#1. 读取excel文件
wb = load_workbook('../data/excel-001.xlsx')

#2. 获取sheet names
sheet_names = wb.sheetnames
# 获取sheet对象
sheets = wb.worksheets

#3. 选择sheet;分别基于sheet name或index
sheet1 = wb[sheet_names[0]]
sheet2 = sheets[1]
sheet3 = sheets[2]

#4. 遍历时也可以直接按照下面的格式
for sheet in wb:
for row in sheet.rows:
print(row)
#5. 定位单元格;分别基于(行,列)元组 或 excel 位置A1,B3;行列从1开始计算
# 单个单元格
cell1 = sheet1.cell(1,1)
cell2 = sheet1.cell(1,2)
cell3 = sheet3['A2']

#6. 打印单元格的值
print(cell1.value)
print(cell2.value)
print(cell3.value)

#7. 打印单元格的属性
print(cell1.style)
print(cell1.font)
print(cell1.alignment)

#8. 一行或者一列; 行从1开始,列从A开始; 返回的sheet元组列表,可循环遍历
cell_row1 = sheet1[1]
cell_column1 = sheet3['A']

for row in cell_row1:
print(row.value)

for column in cell_column1:
print(column.value)

#9. 所有行,所有列。sheet1.rows sheet1.columns;返回对象,可以遍历输出行列元组;
# 可用索引定位某行或列中的一个,输出其。value值;行中有列,列中有行;我中有你,你中,呵,呸。。
rows = sheet1.rows
for row in rows:
print(row)
# 输出每行的第一列,等于输出第一列
for row in rows:
print(row[0].value)
# 输出每一列,第一行的值
columns = sheet1.columns
for column in columns:
print(column[0].value)

point1::: 合并单元格-excel默认存在最上、最左、最左上方的一个单元格内,其他单元格值None
定位或读取时注意

2. 写excel文件
大致分三步:定位并写入值、设置格式,保存;

from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, Side, Font

wb = load_workbook('../data/excel-001.xlsx')
sheet = wb.worksheets[0]

#1. 获取单个单元格,并修改或设置值,
cell = sheet.cell(1,1)
cell.value = 'start'
wb.save('../data/p1.xlsx')

#2. 获取单个单元格,并修改或设置值,
sheet['B2'] = '沈一愣'
wb.save('../data/p2.xlsx')

#3. 获取某些单元格,修改值,A2:B3,矩形,4个单元格;遍历赋值;
cell_list = sheet["A2":"B3"]
for row in cell_list:
for cell in row:
cell.value = "new_value"

#4. 设置格式:对齐方式;
cell = sheet.cell(1,1)
# horizontal:水平方向:'general','left','right','center','fill','justify'等;
# vertical:垂直方向:'top','center','bottom','justify','distributed'
# text_rotation:旋转角度
# wrap_text:是否自动换行:True False
cell.alignment = Alignment(horizontal='center',vertical='center',wrap_text=True)
wb.save('../data/p2.xlsx')

#5. 设置边框,上下左右,对角线; 颜色参考RGD颜色对照表;
# style: dashDot dashDotDot dashed dotted double hair medium thick thin ....
cell = sheet.cell(1,1)
cell.border = Border(
top=Side(style='thin',color='FFB6C1'),
bottom=Side(style='dashed',color='FFB6C1'),
left=Side(style='dashed',color='FFB6C1'),
right=Side(style='dashed',color='FFB6C1'),
diagonal=Side(style='thin',color='FFB6C1'),
diagonalUp=True, #左下——右上
# diagonalDown=True #左上——右下
)
wb.save('../data/p2.xlsx')

#6. 设置字体
cell = sheet.cell(1,1)
cell.font = Font(name="微软雅黑",size=45,color='ff0000',underline='single')
wb.save('../data/p2.xlsx')

#7. 宽高
sheet.row_dimensions[1].height = 50
sheet.column_dimensions['E'].width = 100

#8. 合并单元格; 两种方法
sheet.merge_cells("B2:D4")
sheet.merge_cells(start_row=15,start_column=3,end_row=17,end_column=5)
wb.save('../data/p2.xlsx')

sheet.unmerge_cells("B2:D4") #取消合并
wb.save('../data/p2.xlsx')

#9. 写入公式
sheet["D3"] = "=B2*C2"
sheet["D4"] = "=SUM(B3:C3)"

#10. 删除,从索引开始,删除多少(默认删除1)
sheet.delete_rows(idx=1,amount=10)
sheet.delete_cols(idx=1,amount=5)
wb.save('../data/p2.xlsx')

#11. 插入
sheet.insert_rows(idx=3,amount=10)
sheet.insert_cols(idx=1,amount=20)
wb.save('../data/p2.xlsx')

#12. 循环写
cell_range = sheet['A1:C2']
for row in cell_range:
for cell in row:
cell.value = "hehe"

for row in sheet.iter_rows(min_row=5,min_col=5,max_row=7,max_col=7):
for cell in row:
...

3. 上面已经写了格式处理的部分,下面补充些sheet处理的一些内容
from openpyxl import load_workbook

# 读取excel文件
wb = load_workbook('../data/excel-001.xlsx')

# 获取sheet,打印内容
sheet = wb.worksheets[0]
for row in sheet:
for cell in row:
print(cell.value,end=',')
print(' ')

# 1. 修改名称
sheet.title = "收入数据统计"
wb.save("../data/p3.xlsx")

# 2. 创建并设置颜色
sheet1 = wb.create_sheet("每日计划",0)
sheet.sheet_properties.tabColor = '1072BA'
wb.save("../data/p4.xlsx")

# 3. 设置默认打开的sheet
wb.active = 0 #第一个
wb.save("../data/p4.xlsx")

# 4. 复制拷贝sheet
sheet1 = wb.create_sheet("每日计划",0)
sheet.sheet_properties.tabColor = '1072BA'

new_sheet = wb.copy_worksheet(wb[sheet1])
new_sheet.title = "每周计划"
wb.save("../data/p5.xlsx")

# 5. 删除sheet
del wb['每周计划']
wb.save("../data/p5.xlsx")

------------------------------------------------------------

好了,先这样吧,best wishes to you...
原文地址:https://www.cnblogs.com/bernard-shen/p/14438988.html