python 操作Excel及使用样例

xlrd、xlwt、xlutils
  • xlrd - 读取 Excel 文件

  • xlwt - 写入 Excel 文件

  • xlutils - 复制、分割、筛选等

以上三库pip安装即可


读取:
import xlrd
# 打开 xls 文件
book = xlrd.open_workbook("test.xls")
print "表单数量:", book.nsheets
print "表单名称:", book.sheet_names()
table1 = book.sheets()[0]  # 通过索引顺序获取
table2 = book.sheet_by_index(0)  # 通过索引顺序获取
table3 = book.sheet_by_name(u'Sheet1')  # 通过名称获取

table1.row_values(1) #获取整行值(数组)
table1.col_values(1) #获取整列值(数组)
nrows = table1.nrows #获取行数
ncols = table1.ncols #获取列数
# 获取第1个表单
sh = book.sheet_by_index(0)
print u"表单 %s 共 %d 行 %d 列" % (sh.name, sh.nrows, sh.ncols)
print "第二行第三列:", sh.cell_value(1, 2)
# 遍历所有表单
for s in book.sheets():
    for r in range(s.nrows):
        # 输出指定行
        print s.row(r)



写入:
import xlwt
# 创建 xls 文件对象
wb = xlwt.Workbook()
# 新增一个表单
sh = wb.add_sheet('A Test Sheet')
# 按位置添加数据
sh.write(0, 0, 1111)
sh.write(2, 0, 'test')
a = 'ttest'
sh.write(1, 1, a)
# 若write变量时报错,新增表单时添加参数,如:add_sheet('A Test Sheet', cell_overwrite_ok=True)
# 保存文件
wb.save('test.xls')



修改:
并没有直接修改 xls 文件的方法。通常的做法是,读取出文件,复制一份数据,对其进行修改,再保存。
from xlrd import open_workbook
from xlutils.copy import copy
# 打开文件
rb = open_workbook("test.xls")
# 复制
wb = copy(rb)
# 选取表单
s = wb.get_sheet(0)
# 写入数据
s.write(0, 1, 'test')
# 保存
wb.save('test.xls')


xltw操作excel生成学生成绩报告单,使用样例
#!/usr/bin/env python
# encoding: utf-8

import xlwt
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('sheet1')
#  第一列调整宽度为 60 磅
sheet.col(0).width = 128 * 20  # 128 = 3磅

#  创建一个字体类型,供标题使用
title_style = xlwt.XFStyle()
#  横向对齐方式为居中
title_style.alignment.horz = xlwt.Alignment.HORZ_CENTER
#  字体加粗
title_style.font.bold = True
#  字号大小设置为 18 磅
#  写入单元格的行高会根据字号自适应增大
title_style.font.height = 20 * 18  # 20 = 1磅

#  创建一个字体类型,供正文使用
center_style = xlwt.XFStyle()
center_style.alignment.horz = xlwt.Alignment.HORZ_CENTER
#  纵向对齐方式为居中
center_style.alignment.vert = xlwt.Alignment.VERT_CENTER

#  合并第0行第0列至第0行第10列,并且写入字符,字符样式使用之前设置的title_style
#  write_merge 传入参数为 (r1, r2, c1, c2, label, style), 合并 (r1, c1) 至 (r2, c2) 的所有单元格
sheet.write_merge(0, 0, 0, 10, u'《不知道叫什么的中学》高一学生成绩报告单', title_style)
sheet.write_merge(1, 1, 0, 10, u'《不知道叫什么的中学》高一第一次月考', center_style)
sheet.write_merge(2, 2, 0, 10, u'(年级参加考试人数:1000人      班级参加考试人数:100人)', center_style)
sheet.write(3, 0, u'班级', center_style)
sheet.write_merge(3, 3, 1, 2, u'高一10班', center_style)
sheet.write(3, 3, u'学号', center_style)
sheet.write_merge(3, 3, 4, 5, u'20171024', center_style)
sheet.write(3, 6, u'姓名', center_style)
sheet.write_merge(3, 3, 7, 8, u'隔壁王二', center_style)
sheet.write(3, 9, u'考试日期', center_style)
sheet.write(3, 10, u'2017.10.25', center_style)

#  合并(4,0)至(4,10)单元格
sheet.merge(4, 4, 0, 10)

subjects = [u'总分', u'语文', u'数学', u'英语', u'物理', u'化学', u'生物', u'政治', u'历史', u'地理']
for i, subject in enumerate(subjects, 1):
    sheet.write(5, i, subject, center_style)

score_analysis = [u'成绩', u'班级排名', u'年级排名', u'班级均分', u'年级均分', u'班级最高分', u'年级最高分', u'班级最低分', u'年纪最低分']
for i, analysis_type in enumerate(score_analysis, 6):
    sheet.write(i, 0, analysis_type)

sheet.merge(15, 15, 0, 10)

sheet.write(16, 0, u'科目', center_style)
sheet.write(16, 1, u'错题数', center_style)
sheet.write_merge(16, 16, 2, 10, u'错题题号(括号内为选择题正确答案)', center_style)

for i, subject in enumerate(subjects[1:], 17):
    sheet.write(i, 0, subject, center_style)
    sheet.merge(i, i, 2, 10)

sheet.merge(26, 26, 0, 10)

col_center_style = xlwt.XFStyle()
sheet.write(27, 0, u'教师寄语', center_style)
sheet.write(28, 0, u'家长寄语', center_style)
sheet.write(29, 0, u'学生感受', center_style)

for i in range(27, 30):
    #  向单元格内写入空行,可以利用列高的自适应功能改变行高
    sheet.write_merge(i, i, 1, 10, u'\n\n\n\n')

book.save('test.xls')




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值