Day8-xlrd 和 xlwt操作Excel文件

Day8-xlrd 和 xlwt操作Excel文件

1.xlrd 获取文件内容

1.1 打开Excel文件

wb = xlrd.open_workbook('files/data1.xls')

1.2 获取所有工作表的表名

  • 工作簿.sheet_name()
names = wb.sheet_names()
print(names)         # ['students', 'teacher']

1.3 获取工作表

1)获取所有工作表: 工作簿.sheet()

all_sheet = wb.sheets()
print(all_sheet)      # [Sheet  0:<students>, Sheet  1:<teacher>]

2)获取某一张表

工作簿.sheet_by_name(表名)

工作簿.sheet_by_index(下标)

stu_sheet = wb.sheet_by_name('students')
tea_sheet = wb.sheet_by_index(1)
print(tea_sheet)    # Sheet  1:<teacher>

1.4 获取最大行数和最大列数

  • 工作簿.nrows
  • 工作表.ncols
m_r = stu_sheet.nrows
m_c = stu_sheet.ncols
print(m_r, m_c)      # 5 4

1.5 按行或者按列获取数据

1)按行获取数据

工作表.row_values(行下标) - 获取指定行对应索引数据

工作表.row_values(行下标, 起始列下标) - 获取指定行中指定列开始所有数据

工作表.row_values(行下标, 起始列下标, 终止列下标) - 获取指定行中指定范围的所有数据(终止列表下标取不到)

result = stu_sheet.row_values(3)   # 下标
print(result)      # ['小花', '女', 22.0, 95.0]
result = stu_sheet.row_values(3, 2)
print(result)      # [22.0, 95.0]
result = stu_sheet.row_values(3, 2, 4)   # (行,起始列,终止列),用下标表示
print(result)      # [25.0, 87.0]

2)按列获取数据

result = stu_sheet.col_values(0)
print(result)      # '姓名', '小明', '张三', '小花', '老王']
result = stu_sheet.col_values(0, 1)
print(result)      # ['小明', '张三', '小花', '老王']
result = stu_sheet.col_values(0, 2, 4)
print(result)      # ['张三', '小花']

练习

# 练习1:一行一行的获取整个学生表中所有数据
for x in range(0, m_r):
    result = stu_sheet.row_values(x)
    print(result)

print('------------------------------华丽分割线-----------------------------')

# 练习2:一列一列的获取整个学生表中所有数据
for y in range(0, m_c):
    result = stu_sheet.col_values(y, 1)
    print(result)

1.6 获取单元格

1)工作表.cell(行下标, 列下标) - 获取指定位置对应的单元格对象

2)单元格.value - 获取单元格中数据

print(stu_sheet.cell(1,0))            # text:'小明'
print(stu_sheet.cell(1,0).value)      # 小明

3)工作表.row(行下标) - 获取指定行索引单元格

result = stu_sheet.row(0)
print(result)       # [text:'姓名', text:'性别', text:'年龄', text:'分数']
print(stu_sheet.row(0)[2])     # text:'年龄'

4)工作表.col(列下标)

print(stu_sheet.col(0))   # [text:'姓名', text:'小明', text:'张三', text:'小花', text:'老王']

2.xlwt对文件进行写操作

2.1 创建excel文件(创建工作簿)

wb = xlwt.Workbook()

2.2 添加工作表

1)工作簿.add_sheet(表名) - 在工作簿中添加指定名字对应的工作表,这个表中的单元格不能重写

2)工作簿.add_sheet(表名, cell_overwrite_ok=True) - 在工作簿中添加指定名字对应的工作表,这个表 中的单元格能重写

sheet1 = wb.add_sheet('数据1')
sheet2 = wb.add_sheet('数据2', cell_overwrite_ok=True)

2.3 写入数据

1)工作表.write(行下标, 列下表, 数据) - 将数据写入到指定工作表中指定位置

sheet1.write(0, 0, '名字')
sheet1.write(1, 2, 'hello')

sheet2.write(0, 0, '姓名')
sheet2.write(1, 2, 'hello')
sheet2.write(0, 0, 'name')

3.xlwt修改单元格样式

3.1 创建样式对象

style1 = xlwt.XFStyle()

3.2 添加字体样式

font1 = xlwt.Font()
font1.name = '黑体'
font1.bold = True  # 加粗
font1.height = 15*15
font1.colour_index = 54
style1.font = font1

3.3 添加边框样式

b1 = xlwt.Borders()
b1.bottom = 10
b1.bottom_colour = 16
style1.borders = b1

3.4 添加对齐样式

style2 = xlwt.XFStyle()
al1 = xlwt.Alignment()
al1.vert = xlwt.Alignment.VERT_CENTER      # ⽔平居中
al1.horz = xlwt.Alignment.HORZ_CENTER      # 垂直居中
al1.rota = 45                              # 旋转的⻆度
style2.alignment = al1

3.5 添加填充样式

p1 = xlwt.Pattern()
p1.pattern = xlwt.Pattern.SOLID_PATTERN
p1.pattern_fore_colour = 13
style1.pattern = p1
sheet.write(0, 0, '姓名', style=style2)
sheet.write(3, 2, '对其样式', style=style2)

3.6 合并单元格

1)工作表.write_merge(行下标1, 行下标2, 列下表1, 列下表2, 数据, 样式)

sheet.write_merge(8, 8, 2, 6, 'hello')
sheet.write_merge(12, 22, 2, 7, 'hello', style2)

3.7 设置列的宽度和行的高度

1)设置列的宽度

sheet.col(0).width = 20*256  # 宽30

2)设置行的高度(默认不可设置,设置前要开启允许设置)

sheet.row(0).height_mismatch = True  # 允许指定行设置高度
sheet.row(0).height = 20*60

练习

import xlwt

wb = xlwt.Workbook()
sheet1 = wb.add_sheet('颜色表')


# 对齐方式
al1 = xlwt.Alignment()
al1.vert = xlwt.Alignment.VERT_CENTER      # ⽔平居中
al1.horz = xlwt.Alignment.HORZ_CENTER      # 垂直居中                           # 旋转的⻆度

# 添加边框样式
b1 = xlwt.Borders()
b1.bottom = b1.top = b1.right = b1.left = 2
b1.bottom_colour = b1.bottom_top = b1.right_colour = b1.left_colour = 8


# 字体
f1 = xlwt.Font()
f1.name = '黑体'
f1.bold = True  # 加粗
f2 = xlwt.Font()
f1.name = '黑体'

style1 = xlwt.XFStyle()
style1.alignment = al1
style1.borders = b1
style1.font = f1

style2 = xlwt.XFStyle()
style2.alignment = al1
style2.borders = b1
style2.font = f2

sheet1.write(0, 0, '颜色', style=style1)
sheet1.write(0, 1, '颜色单词', style=style1)
sheet1.write(0, 2, '颜色值', style=style1)

colors = xlwt.Style.colour_map
row = 1
style3 = xlwt.XFStyle()
style3.borders = b1
for key in colors:
    p1 = xlwt.Pattern()
    p1.pattern = xlwt.Pattern.SOLID_PATTERN
    p1.pattern_fore_colour = colors[key]
    style3.pattern = p1

    sheet1.write(row, 2, colors[key], style=style2)
    sheet1.write(row, 1, key, style=style2)
    sheet1.write(row, 0, None, style=style3)
    row += 1

for x in range(len(colors)):
    sheet1.row(x).height_mismatch = True  # 允许指定行设置高度
    sheet1.row(x).height = 20 * 60
wb.save('files/color.xlsx')











# 作业
import xlwt, xlrd
from xlutils.copy import copy

# 1.以读的方式打开excel文件获取原始数据对应表
wb = xlrd.open_workbook('files/副本作业数据.xls')
sheet0 = wb.sheet_by_index(0)

# 2.将只读的工作簿转换成可写的工作簿
wb1 = copy(wb)
if '我的' not in wb.sheet_names():
    sheet1 = wb1.add_sheet('我的')
else:
    exit()    # 退出程序


style1 = xlwt.XFStyle()
style2 = xlwt.XFStyle()
style3 = xlwt.XFStyle()
style4 = xlwt.XFStyle()
style5 = xlwt.XFStyle()

# 第一行
f1 = xlwt.Font()
f1.name = '黑体'
f1.bold = True  # 加粗
f1.height = 18*18
style1.font = f1
# 普通
f2 = xlwt.Font()
f2.height = 15*15
style2.font = f2
style5.font = f2
# 第一列
f3 = xlwt.Font()
f2.height = 15*15
f3.colour_index = 46
style3.font = f3
# 补考
f4 = xlwt.Font()
f2.height = 15*15
f4.colour_index = 10
style4.font = f4


b1 = xlwt.Borders()
b1.bottom = b1.top = b1.right = b1.left = 1
b1.bottom_colour = b1.bottom_top = b1.right_colour = b1.left_colour = 8
style1.borders = b1
style2.borders = b1
style3.borders = b1
style4.borders = b1
style5.borders = b1

al1 = xlwt.Alignment()
al1.vert = xlwt.Alignment.VERT_CENTER      # ⽔平居中
al1.horz = xlwt.Alignment.HORZ_CENTER      # 垂直居中
style1.alignment = al1
style2.alignment = al1
style3.alignment = al1
style4.alignment = al1
style5.alignment = al1

p1 = xlwt.Pattern()
p1.pattern = xlwt.Pattern.SOLID_PATTERN
p1.pattern_fore_colour = 43
style1.pattern = p1
p2 = xlwt.Pattern()
p2.pattern = xlwt.Pattern.SOLID_PATTERN
p2.pattern_fore_colour = 52
style5.pattern = p2

m_r = sheet0.nrows
m_c = sheet0.ncols
for i in range(m_r):
    for j in range(m_c):
        result = sheet0.cell(i,j).value
        if i == 0:
            sheet1.write(0, j, result, style=style1)
        elif j == 0:
            sheet1.write(i, 0, result, style=style3)
        else:
            if result == 0:
                sheet1.write(i, j, '补考', style=style4)
            elif result < 60:
                sheet1.write(i, j, result, style=style5)
            else:
                sheet1.write(i, j, result, style=style2)


sheet1.row(0).height_mismatch = True  # 允许指定行设置高度
sheet1.row(0).height = 20 * 60
for x in range(m_c):
    sheet1.col(x).width = 30 * 256
wb1.save('files/副本作业数据.xls')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值