1. 程式人生 > >Python讀取和寫入Excel檔案[整]

Python讀取和寫入Excel檔案[整]

學習用Python處理Excel檔案,這裡主要用xlrdxlwt模組,用前需要安裝!本文是來自幾篇部落格和官網tutorial的整理,主要是一個入門。更多的處理Excel的方法請到官網學習,連結為:

另外,幾篇部落格的參考資料:

AExcel資料的型別及組織方式

每一個Excel資料檔案從上至下分為三個層級的物件:
workbook
 每一個Excel檔案就是一個workbook
sheet
 每一個workbook中可以包含多個sheet,具體就對應Excel中我們在左下腳所看到的“sheet1”,“sheet2”等。
cell
 每一個sheet就是我們通常所看到的一個表格,可以含有

m行,n列,每個確定的行號,列號所對應的一個格子就是一個cell

B: Excel中讀取資料

從一個既有的xlsx檔案中讀取資料,按照Excel檔案的三個層級,分別做以下三個步驟

1. 開啟workbook

import xlrd
book = xlrd.open_workbook("myfile.xls")    #book
就賦值為一個Excel檔案了

注:

Book 類的方法、屬性等:即就可以對上面的book進行操作了
book.nsheets: 
 Book物件中的檔案有多少個worksheet
book.sheet_by_index(sheetx):
 根據提供的

sheetx索引來獲取我們需要的sheet表,返回的是一個Sheet類的例項。
book.sheet_by_name(sheet_name):
 根據提供的sheet_name來獲取對應名稱的sheet類物件,返回的也是一個Sheet類的物件
book.sheet_names():
 Book物件中的所有sheet表的名稱列表
book.sheets():
 返回在Book物件中所有的Sheet物件例項列表

2. 開啟所需的sheet
sh = book.sheet_by_index(0)  #
獲得一個sheet,也可以使名字獲得
print sh.name, sh.nrows, sh.ncols

注:

Sheet類方法、屬性等:
sh.cell(rowx, colx):
 根據給出的行和列的引數獲取得到cell類,返回一個Cell類例項物件
sh.cell_type(rowx, colx):
 返回對應的cell物件的Type型別
sh.cell_value(rowx, colx):
 返回對應的cell物件的value
sh.col(colx):
 返回指定列的所有cell類物件序列
sh.name:
 返回sheet物件的名稱
sh.ncols:
 返回在sheet物件中的列的數目
sh.nrows:
 返回在sheet物件中的行的數目
sh.row(rowx):
 返回指定的行的所有cell物件的序列

3. 獲取對應cell的值:

cell=sh.cell(rowx=29, colx=3) #根據給出的行和列的引數獲取得到cell類,返回一個Cell類例項物件

sh.cell_value(rowx=29, colx=3)

Cell類的屬性、方法如下:
Cell
類物件有3種屬性:ctype, value, xf_index
如果在excel檔案開啟的時候,formatting_info未啟用的時候,xf_index是為None
下面列出了cell的型別,以及他們在python中所代表的值
type symbol          type number                python value
XL_CELL_EMPTY             0                     
 空的字串''
XL_CELL_TEXT              1                      unicode
字串
XL_CELL_NUMBER            2                      float
XL_CELL_DATE              3                      float
XL_CELL_BOOLEAN           4                      int;1 --- True,0 --- False
XL_CELL_ERROR             5                      int
代表是一個excel內部錯誤碼;
XL_CELL_BLANK             6                     
 空的字串'', 注意:這個型別僅僅會出現,當函式open_workbook(..,formatting_info=True)這樣設定的時候

4.一個讀取Excel的例子

import xlrd
book = xlrd.open_workbook("myfile.xls")
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
sh = book.sheet_by_index(0)
print sh.name, sh.nrows, sh.ncols
print "Cell D30 is", sh.cell_value(rowx=29, colx=3)
for rx in range(sh.nrows):
    print sh.row(rx)

C: Writing Excel Files

All the examples shown below can be found in the xlwt directory of the course material.Excel xlrd模組,寫用xlwt模組

1. Creating elements within a Workbook建立一個Excel檔案

Import xlwt

wb=xlwt.Workbook(“zc.xls”) #Workbook 首字母大寫

2. Worksheets 新增Sheet

Worksheets are created with the add_sheet method of the Workbook class.

To retrieve an existing sheet from a Workbook, use its get_sheet method. This method is particularly useful when the Workbook has been instantiated by xlutils.copy.

Sheet1=wb.add_sheet(“sheetname”)

3. Rows and Columns 行與列的表示:

row1 = sheet1.row(1)

col0=sheet2.col(0)

4. Cells

Cells can be written using either the write method of either the Worksheet or Row class.

sheet1.write(0,1,'B1')

row1.write(0,'A2')

5. svave  儲存檔案:

wb.save(“zc.xls”)

6. Excel寫入的一個簡單的例子

from xlwt import Workbook

book = Workbook()

sheet1 = book.add_sheet('Sheet 1')  #新增一個sheet

book.add_sheet('Sheet 2')

sheet1.write(0,0,'A1')   #通過sheet新增cell

sheet1.write(0,1,'B1')

row1 = sheet1.row(1)

row1.write(0,'A2')     #還可以通過row屬性新增cell

row1.write(1,'B2')

sheet1.col(0).width = 10000

sheet2 = book.get_sheet(1)

sheet2.row(0).write(0,'Sheet 2 A1')  #又一種新增

sheet2.row(0).write(1,'Sheet 2 B1')

sheet2.flush_row_data()

sheet2.write(1,0,'Sheet 2 A3')

sheet2.col(0).width = 5000

sheet2.col(0).hidden = True

book.save('simple.xls')

D 稍微複雜的例子和鞏固

Ex1:

import xlrd
fname = "sample.xls"   #
一個檔案路徑和檔名
bk = xlrd.open_workbook(fname)    #
開啟一個workbook
shxrange = range(bk.nsheets)   #
各個sheet之間的轉換?
try:     #
提取sheet1
    sh = bk.sheet_by_name("Sheet1")
except:
    print "no sheet in %s named Sheet1" % fname
    return None
nrows = sh.nrows
ncols = sh.ncols
print "nrows %d, ncols %d" % (nrows, ncols)

cell_value = sh.cell_value(1,1)
print cell_value

row_list = []
for i in range(1, nrows):
    row_data = sh.row_values(i)
    row_list.append(row_data)

ex2:

 1

2 import xlrd
 3 import xlwt
 4
 5 class OperExcel():
 6   #
讀取Excel
 7   def rExcel(self,inEfile,outfile):
 8     rfile = xlrd.open_workbook(inEfile)
 9     #
建立索引順序獲取一個工作表
10     table = rfile.sheet_by_index(0)
11     #
其他方式
12     #table = rfile.sheets()[0]
13     #table = rfile.sheet_by_name(u'Sheet1')
14
15     #
獲取整行,整列的值
16     table.row_values(0)
17     table.col_values(0)
18
19     #
獲取行數和列數
20     nrows = table.nrows - 1
21     ncols = table.ncols
22
23     #
迴圈獲取列表的資料
24     #for i in range(nrows):
25     #  print table.row_values(i)
26     wfile = open(outfile,'w')
27     #
獲取第一列中的所有值
28     for i in range(nrows):
29       #table.cell(i,0).value
獲取某一單元格的值
30       wfile.write(table.cell(i,0).value.encode('utf8') + '\n')
31     wfile.close()
32
33 #
將資料寫入Excel
34   def wExcel(self,infile,outEfile):
35     rfile = open(infile,'r')
36     buf = rfile.read().split('\n')
37     rfile.close()
38
39     w = xlwt.Workbook()
40     sheet = w.add_sheet('sheet1')
41     for i in range(len(buf)):
42       print buf[i]
43       sheet.write(i,0,buf[i].decode('utf8'))
44     w.save(outEfile)
45
46 if __name__ == '__main__':
47   t = OperExcel()
48   t.rExcel('test.xls','test')
49   t.wExcel('test','1.xls')

50 #  作者:sunrise