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