1
实际案例
问题内容:数据格式为xls,xlsx,是一种常用的电子表格。
小学某班级成绩,记录在excel文件中:
姓名 语文 数学 外语
李磊 95 99 96
韩梅 98 100 93
张峰 94 95 95
……
利用python读写excel,添加“总分”列,计算每人总分。
2
解决办法
使用第三方库xlrd和xlwt,这两个库分别用于excel读和写。
首先安装第三方库
#pip install xlrd xlwt
In [1]: import xlrd
In [4]: book = xlrd.open_workbook('demo.xlsx')
In [5]: book.sheets()
Out[5]: []
## 获取excel中全部sheet
#如何通过book访问sheet?
In [9]: sheet =book.sheet_by_index(0)这里index(0)表示第一个sheet。
# 获取sheet的行数和列数
In [10]: sheet.nrows
Out[10]: 12
In [11]: sheet.ncols
Out[11]: 4
#如何获取每个cell的对象,只需传入行列的坐标就可以了
In [12]: sheet.cell?
Signature: sheet.cell(rowx, colx)
Docstring: :class:`Cell` object in the given row and column.
File: c:\python27\lib\site-packages\xlrd\sheet.py
Type: instancemethod
In [13]: cell = sheet.cell(0,0)
In [14]: cell.ctype
Out[14]: 1
值为1 文本类型
In [15]: cell.value
Out[15]: u'\u59d3\u540d'
In [16]: print cell.value
姓名
#ROW,获取一行一次
In [17]: sheet.row(1)
Out[17]: [text:u'\u674e\u78ca', number:95.0, number:99.0, number:96.0]
它获取一个列表,其中每一项都是一个EXCEL对象。
# 获取第一行的值,返回一个list。
In [21]: sheet.row_values(1)
Out[21]: [u'\u674e\u78ca', 95.0, 99.0, 96.0]
In [22]: sheet.row_values(1,1)
Out[22]: [95.0, 99.0, 96.0]
#还可以为这张表添加单元格,sheet.put_cell
In [23]: sheet.put_cell?
Signature: sheet.put_cell(rowx, colx, ctype, value, xf_index)
Docstring:
File: c:\python27\lib\site-packages\xlrd\sheet.py
Type: instancemethod
xf_index: 字体,对齐,一般设置为None即可
#对于列的操作,可以这样:
# COLUMN
print(sheet.col(2))
print(sheet.col_values(2))
print(sheet.col_values(2, 0, 4))
#程序代码:
#coding:utf8
import xlrd
import xlwt
rbook = xlrd.open_workbook('demo.xlsx')
rsheet = rbook.sheet_by_index(0)
nc = rsheet.ncols
# 添加一个cell
rsheet.put_cell(0, nc, xlrd.XL_CELL_TEXT, u'总分', None)
for row in xrange(1, rsheet.nrows):
t = sum(rsheet.row_values(row, 1, nc))
# 计算每一行的分数之和
rsheet.put_cell(row, nc, xlrd.XL_CELL_NUMBER, t, None)
# 添加一个cell,在总分的列上
#创建EXCEL文件,
wbook = xlwt.Workbook()
wsheet = wbook.add_sheet(rsheet.name)
style = xlwt.easyxf('align: vertical center, horizontal center')
for r in xrange(rsheet.nrows):
for c in xrange(rsheet.ncols):
wsheet.write(r, c, rsheet.cell_value(r, c), style)
wbook.save('output.xlsx')
学习|生活|分享|积累|永不停步
请留下你指尖的温度
让太阳拥抱你
微信ID:haopython