29. 读写excel文件

Excel是日常办公中使用最频繁的软件之一,其数据格式为xls、xlsx,是一种非常常用的电子表格。例如:

姓名    语文    数学    英语
李雷    95      99      96
韩梅    98      100     93
张峰    94      95      95
...

要求:使用Python读写excel,添加“总分”列,计算每人总分。

解决方案:

使用第三方库xlrd和xlwt分别读写excel,需要pip3安装这两个库:pip3 install xlrd xlwt


  • 对于xlrd库:
>>> import xlrd

>>> book = xlrd.open_workbook('demo.xlsx')              #打开xlsx文件

>>> book
<xlrd.book.Book object at 0x7fec40a26278>
>>> book.sheets()               #获取所有sheet表单对象
[<xlrd.sheet.Sheet object at 0x7f4566ccb9b0>]

>>> book.sheet_by_index(0)              #通过索引序号获取sheet表单对象
<xlrd.sheet.Sheet object at 0x7f4566ccb9b0>

>>> book.sheet_by_name('Sheet1')                #通过表单名获取sheet表单对象
<xlrd.sheet.Sheet object at 0x7f4566ccb9b0>
>>> sheet = book.sheet_by_index(0)

>>> sheet.nrows             #获取表单行数
4

>>> sheet.ncols             #获取表单列数
4
>>> c00 = sheet.cell(0, 0)              #获取具体行列(单元格)的值

>>> c00
text:'姓名'

>>> type(c00)
<class 'xlrd.sheet.Cell'>

>>> c00.ctype
1

>>> c00.value
'姓名'

>>> xlrd.XL_CELL_
xlrd.XL_CELL_BLANK    xlrd.XL_CELL_DATE     xlrd.XL_CELL_ERROR    xlrd.XL_CELL_TEXT     
xlrd.XL_CELL_BOOLEAN  xlrd.XL_CELL_EMPTY    xlrd.XL_CELL_NUMBER

常用单元格中的数据类型:

0:empty(空的);1:string(text);2:number;3:date;4:boolean;5:error;6:blank(空白表格)

>>> sheet.row(0)                #获取对应行的值
[text:'姓名', text:'语文', text:'数学', text:'英语']

>>> sheet.col(0)                #获取对应列的值
[text:'姓名', text:'李雷', text:'韩梅', text:'张峰']

>>> sheet.row_values(0)
['姓名', '语文', '数学', '英语']

>>> sheet.col_values(0)
['姓名', '李雷', '韩梅', '张峰']

>>> sheet.row_values(1, 1)              #可切片,两个1分别表示行索引、列索引
[95.0, 99.0, 96.0]
>>> sheet.put_cell(0, sheet.ncols, xlrd.XL_CELL_TEXT, '总分', None)             #增加单元格,0为行索引,sheet.ncols为列索引,数据类型为text
  • 对于xlwt库:
>>> import xlwt

>>> wbook = xlwt.Workbook()

>>> wsheet = wbook.add_sheet('test')                #增加表单,表单名为test

>>> wsheet.write(0, 0, 'abc')               #表单0行0列写入abc

>>> wsheet.write(0, 1, 100)             #表单0行1列写入100

>>> wbook.save('test.xlsx')             #保存为test.xlsx

此时导出到桌面,就可以看到该xlsx文件中的数据。


  • 方案示例:

demo.xlsx:

姓名    语文    数学    英语
李雷    95      99      96
韩梅    98      100     93
张峰    94      95      95
import xlrd, xlwt

rbook = xlrd.open_workbook('demo.xlsx')
rsheet = rbook.sheet_by_index(0)
k = rsheet.ncols

rsheet.put_cell(0, k, xlrd.XL_CELL_TEXT, '总分', None)

for i in range(1, rsheet.nrows):
    t = sum(rsheet.row_values(i, 1))
    rsheet.put_cell(i, k, xlrd.XL_CELL_NUMBER, t, None)

wbook = xlwt.Workbook()
wsheet = wbook.add_sheet(rsheet.name)

for i in range(rsheet.nrows):
    for j in range(rsheet.ncols):
        wsheet.write(i, j, rsheet.cell_value(i, j))

wbook.save('out.xlsx')

out.xlsx:

姓名	语文	数学	英语	总分
李雷	95      99	    96	    290
韩梅	98	    100	    93	    291
张峰	94	    95	    95	    284

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值