日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python中xlrd和xlwt模塊使用方法

 KyunraWang 2021-12-20

 


xlrd模塊實(shí)現(xiàn)對(duì)excel文件內(nèi)容讀取,xlwt模塊實(shí)現(xiàn)對(duì)excel文件的寫入。

安裝

1
2
pip install xlrd
pip install xlwt

 

xlrd模塊使用

excel文檔名稱為聯(lián)系人.xls,內(nèi)容如下:

 

 

(1) 打開excel文件并獲取所有sheet

1
2
3
4
5
6
7
import xlrd
# 打開Excel文件讀取數(shù)據(jù)
data = xlrd.open_workbook('聯(lián)系人.xls')
sheet_name = data.sheet_names()  # 獲取所有sheet名稱
print(sheet_name) # ['銀行2', '銀行3']

(2) 根據(jù)下標(biāo)獲取sheet名稱

1
2
3
# 根據(jù)下標(biāo)獲取sheet名稱
sheet2_name = data.sheet_names()[1]
print(sheet2_name)  # '銀行3'

(3) 根據(jù)sheet索引或者名稱獲取sheet內(nèi)容,同時(shí)獲取sheet名稱、行數(shù)、列數(shù)

1
2
3
4
5
6
7
8
9
10
11
12
13
# 根據(jù)sheet索引或者名稱獲取sheet內(nèi)容,同時(shí)獲取sheet名稱、列數(shù)、行數(shù)
sheet2 = data.sheet_by_index(1)
print('sheet2名稱:{}\nsheet2列數(shù): {}\nsheet2行數(shù): {}'.format(sheet2.name, sheet2.ncols, sheet2.nrows))
# sheet2名稱:銀行3
# sheet2列數(shù): 7
# sheet2行數(shù): 5
sheet1 = data.sheet_by_name('銀行2')
print('sheet1名稱:{}\nsheet1列數(shù): {}\nsheet1行數(shù): {}'.format(sheet1.name, sheet1.ncols, sheet1.nrows))
# sheet1名稱:銀行2
# sheet1列數(shù): 8
# sheet1行數(shù): 6

 (4) 根據(jù)sheet名稱獲取整行和整列的值

1
2
3
4
5
6
#  根據(jù)sheet名稱獲取整行和整列的值
sheet1 = data.sheet_by_name('銀行2')
print(sheet1.row_values(3))  
# ['', '張2', '開發(fā)', 'IT編碼', 999.0, 133111.0, 41463.0, 'zhang2@164.com'] 日期2013/7/7,實(shí)際卻顯示為浮點(diǎn)數(shù)41463.0
print(sheet1.col_values(3)) 
# ['', '工作職責(zé)', '', 'IT編碼', '網(wǎng)絡(luò)維修', '']

 (5)獲取指定單元格的內(nèi)容

1
2
3
4
# 獲取指定單元格的內(nèi)容
print(sheet1.cell(1,0).value)  # 第2 行1列內(nèi)容:機(jī)構(gòu)名稱
print(sheet1.cell_value(1,0))  # 第2 行1列內(nèi)容:機(jī)構(gòu)名稱
print(sheet1.row(1)[0].value)  # 第2 行1列內(nèi)容:機(jī)構(gòu)名稱

(6)獲取單元格內(nèi)容的數(shù)據(jù)類型

1
2
3
4
5
# 獲取單元格內(nèi)容的數(shù)據(jù)類型
print(sheet1.cell(1,0).ctype)  # 第2 行1列內(nèi)容 :機(jī)構(gòu)名稱為string類型
print(sheet1.cell(3,4).ctype)  # 第4行5列內(nèi)容:999 為number類型
print(sheet1.cell(3,6).ctype)  # 第4 行7列內(nèi)容:2013/7/8 為date類型
# 說(shuō)明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

(7)獲取單元內(nèi)容為日期類型的方式

   使用xlrd的xldate_as_tuple處理為date格式

1
2
3
4
5
6
7
8
from datetime import datetime,date
if sheet1.cell(3,6).ctype == 3 :
    print(sheet1.cell(3, 6).value)  # 41463.0
    date_value = xlrd.xldate_as_tuple(sheet1.cell(3, 6).value, data.datemode)
    print(date_value)  # (2013, 7, 8, 0, 0, 0)
    print(date(*date_value[:3])) # 2013-07-08
    print(date(*date_value[:3]).strftime('%Y/%m/%d'))  # 2013/07/08

(8)獲取單元內(nèi)容為number的方式(轉(zhuǎn)為整型)

1
2
3
4
if sheet1.cell(3, 5).ctype == 2:
    print(sheet1.cell(3, 5).value)  # 133111.0
    num_value = int(sheet1.cell(3, 5).value)
    print(num_value)  # 133111

(9) 獲取合并單元格的內(nèi)容 

需要merged_cells屬性
1
2
3
4
5
6
7
8
9
10
11
# 這里,需要在讀取文件的時(shí)候添加個(gè)參數(shù),將formatting_info參數(shù)設(shè)置為True,默認(rèn)是False,否
# 則可能調(diào)用merged_cells屬性獲取到的是空值。<br>
data = xlrd.open_workbook('聯(lián)系人.xls',formatting_info=True)
sheet1 = data.sheet_by_name('銀行2')
print(sheet1.merged_cells)  # [(0, 1, 0, 8), (2, 6, 0, 1)]<br>
# merged_cells返回的這四個(gè)參數(shù)的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,
# 不包括row_range,col也是一樣,下標(biāo)從0開始。
#(0, 1, 0, 8) 表示1列-8列合并 (2, 6, 0, 1)表示3行-6行合并<br>
# 分別獲取合并2個(gè)單元格的內(nèi)容:
print(sheet1.cell(0,0).value)  # 銀行2
print(sheet1.cell_value(2, 0))  # 銀行2
規(guī)律 : 獲取merge_cells返回的row和col低位的索引即可!

 使用以下方法更加方便

1
2
3
4
5
6
7
8
9
merge_value = []
for (row,row_range,col,col_range) in sheet1.merged_cells:
    merge_value.append((row,col))
print(merge_value)  # [(0, 0), (2, 0)]
for v in merge_value:
    print(sheet1.cell(v[0], v[1]).value)
# 銀行2
# 銀行2

  

xlwt模塊

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import xlwt
from datetime import datetime,date
def set_style(name, height, bold=False, format_str=''):
    style = xlwt.XFStyle()  # 初始化樣式
    font = xlwt.Font()  # 為樣式創(chuàng)建字體
    font.name = name  # 'Times New Roman'
    font.bold = bold
    font.height = height
    borders= xlwt.Borders() # 為樣式創(chuàng)建邊框
    borders.left= 6
    borders.right= 6
    borders.top= 6
    borders.bottom= 6
    style.font = font
    style.borders = borders
    style.num_format_str= format_str
    return style
wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet') # 增加sheet
ws.col(0).width = 200*30 # 設(shè)置第一列列寬
ws.write(0, 0, 1234.56,set_style('Times New Roman',220,bold=True,format_str='#,##0.00'))
ws.write(1, 0, datetime.now(), set_style('Times New Roman',220,bold=False, format_str='DD-MM-YYYY'))
styleOK = xlwt.easyxf('pattern: fore_colour light_blue;'
                          'font: colour green, bold True;')
pattern = xlwt.Pattern()#一個(gè)實(shí)例化的樣式類
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 固定的樣式
pattern.pattern_fore_colour = xlwt.Style.colour_map['red']#背景顏色
styleOK.pattern = pattern
ws.write(2, 0, 1,style=styleOK)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))
wb.save('example.xls')   # 保存xls

 

聯(lián)系人表

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import xlwt
from datetime import datetime, date
def set_style(name, height, bold=False, format_str='',align='center'):
    style = xlwt.XFStyle()  # 初始化樣式
    font = xlwt.Font()  # 為樣式創(chuàng)建字體
    font.name = name  # 'Times New Roman'
    font.bold = bold
    font.height = height
    borders = xlwt.Borders()  # 為樣式創(chuàng)建邊框
    borders.left = 2
    borders.right = 2
    borders.top = 0
    borders.bottom = 2
    alignment = xlwt.Alignment()  # 設(shè)置排列
    if align== 'center':
        alignment.horz = xlwt.Alignment.HORZ_CENTER
        alignment.vert = xlwt.Alignment.VERT_CENTER
    else:
        alignment.horz = xlwt.Alignment.HORZ_LEFT
        alignment.vert = xlwt.Alignment.VERT_BOTTOM
    style.font = font
    style.borders = borders
    style.num_format_str = format_str
    style.alignment = alignment
    return style
wb = xlwt.Workbook()
ws = wb.add_sheet('聯(lián)系人',cell_overwrite_ok=True# 增加sheet
rows = ['機(jī)構(gòu)名稱', '姓名', '部門', '電話', '入職日期', '手機(jī)', '郵箱']
col1 = ['王1', '王2', '王3']
col2 = ['666', '777','888']
col3 = ['2014-08-09','2014-08-11','2015-08-09']
# 寫第一行數(shù)據(jù)
ws.write_merge(
    0,
    0,
    0,
    6,
    '聯(lián)系人表',
    set_style(
        'Times New Roman',
        320,
        bold=True,
        format_str=''))  # 合并單元格
styleOK = xlwt.easyxf()
pattern = xlwt.Pattern()  # 一個(gè)實(shí)例化的樣式類
pattern.pattern = xlwt.Pattern.SOLID_PATTERN  # 固定的樣式
pattern.pattern_fore_colour = xlwt.Style.colour_map['yellow'# 背景顏色
borders = xlwt.Borders()  # 為樣式創(chuàng)建邊框
borders.left = 2
borders.right = 2
borders.top = 6
borders.bottom = 2
font = xlwt.Font()  # 為樣式創(chuàng)建字體
font.name = 'Times New Roman'
font.bold = True
font.height = 220
styleOK.pattern = pattern
styleOK.borders = borders
styleOK.font = font
# 寫第二行數(shù)據(jù)
for index, val in enumerate(rows):
    ws.col(index).width = 150 * 30 # 定義列寬
    ws.write(1, index, val, style=styleOK)
# 寫第3行-6行第一列數(shù)據(jù)
ws.write_merge(
    2,
    2 + len(col1)-1,
    0,
    0,
    'x機(jī)構(gòu)',
    set_style(
        'Times New Roman',
        320,
        bold=True,
        format_str=''))  # 合并單元格
# 從第3行開始寫1列數(shù)據(jù)
for index, val in enumerate(col1):
    ws.col(1).width = 150 * 30 # 定義列寬
    ws.write(index+2, 1, val, style=set_style('Times New Roman',
        200,
        bold=False,
        format_str='',align=''))
# 從第3行開始寫4列數(shù)據(jù)
for index, val in enumerate(col2):
    ws.col(3).width = 150 * 30 # 定義列寬
    ws.write(index+2, 3, val, style=set_style('Times New Roman',
        200,
        bold=False,
        format_str='',align=''))
# 從第3行開始寫5列數(shù)據(jù)
for index, val in enumerate(col3):
    ws.col(4).width = 150 * 30 # 定義列寬
    ws.write(index+2, 4, val, style=set_style('Times New Roman',
        200,
        bold=False,
        format_str='',align=''))
ws.write(4, 2,'技術(shù)部', style=styleOK)
ws.write(4, 5,'186777233', style=styleOK)
ws.write(4, 6,'wang@166.com', style=styleOK)
wb.save('test.xls')   # 保存xls

  

 

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多