day8Python操作Excel

Python操作Excel

-----------------openpyxl读Excel文件

-----------------Excel写操作(openpyxl)

-----------------设置样式(openpyxl)

一、openpyxl读Excel文件

Excel相关概念

1)工作簿 - 一个Excel文件(后缀是.xls或者.xlsx的文

件)就是一个工作簿

2)工作表 - Excel文件中每个活动页就是一个工作表

3)单元格 - 工作表中的每一个格子就是一个单元格

import openpyxl

# 1.打开Excel文件获取工作簿对象
wb = openpyxl.open('files/data.xlsx')

# 2.获取工作表相关信息

# 1)获取工作簿所有的工作表名称
names = wb.sheetnames
print(names)     #['student', 'teacher']
 
# 2)获取指定的工作表对象
# a.工作簿对象.active  -   获取当前工作簿的活跃表(默认选中的表)
# b.工作簿对象[表名]    -   获取工作簿中指定名字对应的工作表

# 方法a
a_sheet = wb.active
print(a_sheet)   # <Worksheet "teacher">

# 方法b
student_s = wb['student']
print(student_s)   # <Worksheet "student">

teacher_s = wb['teacher']
print(teacher_s)

# 3)获取单元格相关信息
# a.工作表对象.max_row    -   最大行数
# b.工作表对象.max_column -   最大列数
mr = student_s.max_row
mc = student_s.max_column
print(mr, mc)    # 6 4
mr1 = teacher_s.max_row
mc1 = teacher_s.max_column
print(mr1, mc1)    # 4 2

# c.工作表对象.cell(行号, 列号)  --- 获取指定行中的指定列对应的单元格(获取指定位置对应的单元格)
cell1 = student_s.cell(1, 2)
cell2 = student_s.cell(3, 1)

# d.单元格对象.value  -   获取指定单元格中的内容
print(cell1.value)     # 姓名
print(cell2.value)     # 002

# 练习1:获取学生表中第五个学生的所有信息
stu = []
row = 5 + 1
for col in range(1, mc+1):
    stu.append(student_s.cell(row, col).value)
print(stu)


# # 练习2:获取所有学生的性别
genders = []
col = 4
for row in range(2, mr + 1):
    value = student_s.cell(row, col).value
    genders.append(value)
print(genders)


# 练习3:获取老师表中所有的数据
mc1 = teacher_s.max_column
mr1 = teacher_s.max_row
for row in range(1, mr1 + 1):
    row_data = []
    for col in range(1, mc1 + 1):
        value = teacher_s.cell(row, col).value
        row_data.append(value)
    print(row_data)

二、Excel写操作(openpyxl)

1. 写操作
import openpyxl
import os

# 补充:
# os.path.exists(文件或者文件夹路径)   -  判断指定文件或者文件夹是否存在

# 1.新建工作簿(新建Excel文件)
#  判断是否存在该文件
if os.path.exists('files/data2.xlsx'):
    wb1 = openpyxl.open('files/data2.xlsx')
else:
    wb1 = openpyxl.Workbook()

# 2.新建工作表
# 工作簿对象.creat_sheet(表名)  -  创建指定名字的工作表,并且返回工作表对象

# print(wb1.sheetnames)  获取所有的工作表名
if 'student' in wb1.sheetnames:
    print('获取学生表')
    student = wb1['student']
else:
    print('创建学生表')
    student = wb1.create_sheet('student')

# 3.删除工作表
# 工作簿对象.remove(工作表)
if 'Sheet' in wb1.sheetnames:
    wb1.remove(wb1['Sheet'])

# 4.修改单元格内容
# 单元格.value = 数据
student.cell(1, 3).value = '李四'
student.cell(1, 1).value = '老王'
student.cell(1, 2).value = None

# 保存工作簿(保存文件)  -  所有的写操作只有在保存之后有效
wb1.save('files/data2.xlsx')
2. 练习
# 练习:
# 新建Excel文件(信息.xlsx),然后再新建’学生表‘,将students中所有的学生信息写入到student表中(并且需要自己添加表头)
# 姓名、年龄、性别、电话、联系人姓名、联系人电话

students = [
        {'name': 'stu1', 'age': 20, 'gender': '男', 'tel': '11987223', 'linkman': {'name': '张三', 'tel': '81923'}},
        {'name': 'stu2', 'age': 22, 'gender': '女', 'tel': '8293212', 'linkman': {'name': '小明', 'tel': '6666'}},
        {'name': 'stu3', 'age': 25, 'gender': '女', 'tel': '727332', 'linkman': {'name': '李四', 'tel': '829333'}},
        {'name': 'stu4', 'age': 19, 'gender': '男', 'tel': '563743', 'linkman': {'name': '老王', 'tel': '778822'}},
        {'name': 'stu5', 'age': 23, 'gender': '男', 'tel': '0928322', 'linkman': {'name': '赵六', 'tel': '829101'}}
]

import openpyxl
import os

# 1.创建工作簿
if os.path.exists('files/信息.xlsx'):
    wb2 = openpyxl.open('files/信息.xlsx')
else:
    wb2 = openpyxl.Workbook()
    
# 2.创建工作表
if '学生表' in wb2.sheetnames:
    sheet = wb2['学生表']
else:
    sheet = wb2.create_sheet('学生表')

# 3.添加数据

# a.添加表头
headers = ['姓名', '年龄', '性别', '电话', '联系人姓名','联系人电话']
for col in range(1, len(headers) + 1):
    sheet.cell(1, col).value = headers[col - 1]

# b.添加学生数据
row = 2
for stu in students:
    sheet.cell(row, 1).value = stu['name']
    sheet.cell(row, 2).value = stu['age']
    sheet.cell(row, 3).value = stu['gender']
    sheet.cell(row, 4).value = stu['tel']
    sheet.cell(row, 5).value = stu['linkman']['name']
    sheet.cell(row, 6).value = stu['linkman']['tel']
    row += 1
    
wb2.save('files/信息.xlsx')

三、设置样式(openpyxl)

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

wb = openpyxl.open('files/data.xlsx')
sheet = wb['teacher']
# sheet = wb.active

# --------------设置样式----------------

# 1.设置宽度和高度
# 设置指定列的宽度
sheet.column_dimensions['A'].width = 25
sheet.column_dimensions['B'].width = 25
# 设置指定列的高度
sheet.row_dimensions[1].height = 30
for x in range(2, 5):
    sheet.row_dimensions[x].height = 25

    
# 2.设置单元格字体样式
# 1)创建字体对象
font1 = Font(
    # 字体名称
    name='黑体',
    # 是否添加删除线
    # strike=True,
    # 文字颜色  r(0~255)、g(0~255)、b(0~255)
    color='643850',
    # 字体大小
    size=20,
    # 是否加粗
    bold=True,
    # 是否倾斜
    italic=True,
    # 添加下划线 'singleAccounting', 'double', 'single', 'doubleAccounting'
    underline='single'
)


# 2)设置单元格的字体
# sheet.cell(4, 1).font = font1
for row in range(2, 5):
    sheet.cell(row, 1).font = font1


# 3.设置填充样式 -
fill1 = PatternFill(
    # 设置填充样式:darkGrid', 'darkTrellis', 'darkHorizontal', 'darkGray', 'lightDown', 'lightGray', 'solid', 'lightGrid', 'gray125', 'lightHorizontal', 'lightTrellis', 'darkDown', 'mediumGray', 'gray0625', 'darkUp', 'darkVertical', 'lightVertical', 'lightUp'
    fill_type='solid',
    # 起始颜色':fill_type为solid的时候只有起始颜色有效
    start_color='FAFAD2',
    # 结束颜色
    end_color='FF7F50'
)


# 2)设置单元格填充样式
sheet.cell(1, 1).fill = fill1


# 4.设置单元格对齐方式
ag1 = Alignment(
    # 垂直对齐方式:center、top、bottom
    vertical='center',
    # 水平对齐方式:cente、left、right
    horizontal='center'
)
sheet.cell(1, 1).alignment = ag1


# 5.设置边框样式
side1 =Side(
# 1)创建边对象:
# 样式:'dashDotDot', 'mediumDashed', 'dashed', 'hair', 'dotted', 'dashDot', 'slantDashDot', 'mediumDashDotDot', 'thin', 'thick', 'medium', 'double', 'mediumDashDot'
    border_style='medium',
    # 颜色
    color='ffff00'
)
side2 =Side(
    border_style='dashDotDot',
    color='ff00ff'
)


# 2)创建单元格的边框
border1 = Border(
    left=side1, right=side1, top=side2, bottom=side2
)


# 3)设置单元格边框样式
sheet.cell(2, 4).border = border1


wb.save('files/data.xlsx')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值