Python中xlrd和xlwt模塊讀寫Excel的方法

本文主要介紹可操做excel文件的xlrd、xlwt模塊。其中xlrd模塊實現對excel文件內容讀取,xlwt模塊實現對excel文件的寫入。python

着重掌握讀取操做,由於實際工做中讀取excel用得比較多,寫操做幾乎不怎麼用。數組

 

python讀excel—xlrdapp

測試使用excel文檔名稱爲result.xls,內容以下:函數

 

一、  打開excel文件並獲取全部sheet的名稱,以及根據下標獲取sheet名稱測試

1     #打開excel文件
2     workbook = xlrd.open_workbook(r'C:\Users\Administrator.USER-20170604IN\Desktop\result.xls')
3     #獲取excel中全部的sheet頁
4     sheet_names = workbook.sheet_names()
5     print(sheet_names)
6     #獲取第一個sheet的名稱
7     print(sheet_names[0])

二、  根據sheet索引或者名稱獲取sheet內容,並獲取sheet名稱、行數、列數字體

1     #根據sheet索引或者名稱獲取sheet內容
2     sheet1 = workbook.sheet_by_index(0)  #sheet索引從0開始
3     sheet1 = workbook.sheet_by_name('Sheet1')
4     
5     #打印sheet1的名稱,行數,列數
6     print(sheet1.name, sheet1.nrows, sheet1.ncols)

三、根據sheet名稱獲取整行和整列的值spa

1     #獲取整行和整列的值(數組)
2     rows = sheet1.row_values(3)  #獲取第四行的內容
3     cols = sheet1.col_values(2)  #獲取第三列的內容
4     print(rows)
5     print(cols)

四、獲取指定單元格的內容.net

1     #獲取單元格內容
2     print(sheet1.cell(1,0).value)
3     print(sheet1.cell_value(1,0))
4     print(sheet1.row(1)[0].value)

五、獲取單元格內容的數據類型3d

1     #獲取單元格內容的數據類型
2     print(sheet1.cell(7,4).ctype)

說明:ctype:0 empty,1 string,2 number,3 date,4 boolean,5 errorexcel

六、獲取單元內容爲日期類型的方式

使用xlrd的xldate_as_tuple處理date格式,先判斷表格的ctype=3時xlrd才能執行操做,以下:

1 if (sheet.cell(row,col).ctype == 3):
2   date_value = xlrd.xldate_as_tuple(sheet.cell_value(1,2),workbook.datemode)
3   date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

七、獲取合併單元格的內容

讀取合併單元格時,只有合併單元格的第一個cell是有值的,其餘cell都是空的。若是但願知道哪些是合併單元格,須要在讀取文件的時候須要將formatting_info參數設置爲True,默認是False。

 1     workbook = xlrd.open_workbook(r'C:\Users\Administrator.USER-20170604IN\Desktop\result.xls', formatting_info = True)
 2     sheet1 = workbook.sheet_by_name('Sheet1')
 3     print(sheet1.merged_cells)
 4     
 5     merge = []
 6     for rlow, rhigh, clow, chigh in sheet1.merged_cells:
 7         merge.append([rlow, clow])
 8     print(merge)
 9     for index in merge:
10         print(sheet1.cell_value(index[0], index[1]))

 運行結果以下:

merged_cell返回的四個參數的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是同樣,即(1,3,4,5)的含義是:在第5列,第2行到第3行合併,(7,8,2,5)的含義是:在第8行,第3列到第5列合併。注意這些數字都是下標,換成實際excel行數列數時要加1。

 

 python寫excel——xlwt

下面的sheet1是即將要用xlwt實現的東西:

代碼以下:

 1 '''
 2 設置單元格樣式
 3 '''
 4  
 5 def set_style(name,height,bold=False):
 6   style = xlwt.XFStyle() # 初始化樣式
 7  
 8   font = xlwt.Font() # 爲樣式建立字體
 9   font.name = name # 'Times New Roman'
10   font.bold = bold
11   font.color_index = 4
12   font.height = height
13  
14   # borders= xlwt.Borders()
15   # borders.left= 6
16   # borders.right= 6
17   # borders.top= 6
18   # borders.bottom= 6
19  
20   style.font = font
21   # style.borders = borders
22  
23   return style
24  
25  
26 #寫excel
27 def write_excel():
28   f = xlwt.Workbook() #建立工做簿
29  
30   '''
31   建立第一個sheet:
32     sheet1
33   '''
34   sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #建立sheet
35   row0 = [u'業務',u'狀態',u'北京',u'上海',u'廣州',u'深圳',u'狀態小計',u'合計']
36   column0 = [u'機票',u'船票',u'火車票',u'汽車票',u'其它']
37   status = [u'預訂',u'出票',u'退票',u'業務小計']
38  
39   #生成第一行
40   for i in range(0,len(row0)):
41     sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
42  
43   #生成第一列和最後一列(合併4行)
44   i, j = 1, 0
45   while i < 4*len(column0) and j < len(column0):
46     sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列
47     sheet1.write_merge(i,i+3,7,7) #最後一列"合計"
48     i += 4
49     j += 1
50  
51   sheet1.write_merge(21,21,0,1,u'合計',set_style('Times New Roman',220,True))
52  
53   #生成第二列
54   i = 0
55   while i < 4*len(column0):
56     for j in range(0,len(status)):
57       sheet1.write(j+i+1,1,status[j])
58     i += 4
59  
60   f.save('demo1.xlsx') #保存文件
61  
62 if __name__ == '__main__':
63   #generate_workbook()
64   #read_excel()
65   write_excel()

解釋一下write_merge方法:

write_merge(x, x + m, y, w + n, string, sytle)

x表示行,y表示列,m表示跨行個數,n表示跨列個數,string表示要寫入的單元格內容,style表示單元格樣式。其中,x,y,w,h,都是以0開始計算的。

這個和xlrd中的讀合併單元格的不太同樣。

如上述:sheet1.write_merge(21,21,0,1,u'合計',set_style('Times New Roman',220,True))

即在22行合併第1,2列,合併後的單元格內容爲"合計",並設置了style。

若是須要建立多個sheet,則只要f.add_sheet便可。

如在上述write_excel函數裏f.save('demo1.xlsx') 這句以前再建立一個sheet2,效果以下:

代碼以下:

 1 '''
 2   建立第二個sheet:
 3     sheet2
 4   '''
 5   sheet2 = f.add_sheet(u'sheet2',cell_overwrite_ok=True) #建立sheet2
 6   row0 = [u'姓名',u'年齡',u'出生日期',u'愛好',u'關係']
 7   column0 = [u'小杰',u'小胖',u'小明',u'大神',u'大仙',u'小敏',u'無名']
 8  
 9   #生成第一行
10   for i in range(0,len(row0)):
11     sheet2.write(0,i,row0[i],set_style('Times New Roman',220,True))
12  
13   #生成第一列
14   for i in range(0,len(column0)):
15     sheet2.write(i+1,0,column0[i],set_style('Times New Roman',220))
16  
17   sheet2.write(1,2,'1991/11/11')
18   sheet2.write_merge(7,7,2,4,u'暫無') #合併列單元格
19   sheet2.write_merge(1,2,4,4,u'好朋友') #合併行單元格
20    
21   f.save('demo1.xlsx') #保存文件

 

參考資料:python中使用xlrd、xlwd操做excel表格詳解

相關文章
相關標籤/搜索