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

發佈了225 篇原創文章 · 獲贊 227 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章