0%

python小菜鸟备忘录:用python读取/写入excel

最近要做数据分析,总要跟excel打交道,我好懒,于是打算用python搞搞excel

读取

使用的库是xlrd,基本操作

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
import xlrd
with xlrd.open_workbook('x.xlsx') as workbook: #打开文档
worksheet=workbook.sheet_by_name('Sheet1') #读取工作表
for row_index in range(worksheet.nrows): #对于每一行
content = worksheet.cell_value(row_index, 0) #获取某个格的内容

#或者另外一种方法读取excel
data_excel=xlrd.open_workbook('data/dataset.xlsx')

# 获取所有sheet名称
names=data_excel.sheet_names()

# 获取book中的sheet工作表的三种方法,返回一个xlrd.sheet.Sheet()对象
table=data_excel.sheets()[0] # 通过索引顺序获取sheet
table=data_excel.sheet_by_index(sheetx=0) # 通过索引顺序获取sheet
table=data_excel.sheet_by_name(sheet_name='Sheet1') # 通过名称获取

# excel工作表的行列操作
n_rows=table.nrows # 获取该sheet中的有效行数
n_cols=table.ncols # 获取该sheet中的有效列数
row_list=table.row(rowx=0) # 返回某行中所有的单元格对象组成的列表
cols_list=table.col(colx=0) # 返回某列中所有的单元格对象组成的列表
content_list = worksheet.row_values(0) #获取某行中所有的单元格内容组成的列表


# 返回某行中所有单元格的数据组成的列表
row_data=table.row_values(0,start_colx=0,end_colx=None)

# 返回某列中所有单元格的数据组成的列表
cols_data=table.col_values(0,start_rowx=0,end_rowx=None)
row_lenth=table.row_len(0) # 返回某行的有效单元格长度

写入

写入的库是 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
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

# 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding='utf-8')

# 创建一个worksheet
worksheet = workbook.add_sheet('Sheet1')

#字体样式设置
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = 'Times New Roman'
font.height = 20 * 11 # 字体大小,11为字号,20为衡量单位
font.bold = True # 黑体
font.underline = True # 下划线
font.italic = True # 斜体字
style.font = font # 设定样式

# 数据写入excel,参数对应 行, 列, 值
worksheet.write(0, 0, 'test_data') # 不带样式的写入
worksheet.write(1, 0, 'test_data', style) # 带字体样式的写入

# 设置单元格宽度
worksheet.col(0).width = 3333

#设置单元格背景颜色
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 13
style = xlwt.XFStyle() # Create the Pattern
style.pattern = pattern # Add Pattern to Style
worksheet.write(2, 0, 'colour', style)

#给单元格添加边框方法一
borders = xlwt.Borders() # Create Borders
borders.left = xlwt.Borders.DASHED #DASHED虚线,NO_LINE没有,THIN实线
borders.right = xlwt.Borders.DASHED #borders.right=1 表示实线
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED
borders.left_colour=0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40
style = xlwt.XFStyle() # Create Style
style.borders = borders # Add Borders to Style
worksheet.write(3,0 , 'border1', style)

#给单元格添加边框方法二
# 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7,大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13
borders = xlwt.Borders()
borders.left = 1 #设置为细实线
borders.right = 1
borders.top = 1
borders.bottom = 1
borders.left_colour = 2 #颜色设置为红色
borders.right_colour = 2
borders.top_colour = 2
borders.bottom_colour = 2
style = xlwt.XFStyle() # Create Style
style.borders = borders # Add Borders to Style
worksheet.write(4, 0, 'border2', style)

#单元格添加计算公式
worksheet.write(0, 1, 2) # Outputs 2
worksheet.write(0, 2, 3) # Outputs 3
worksheet.write(1, 1, xlwt.Formula('B1*C1')) # Should output "6" (B1[2] * B2[6])
worksheet.write(1, 2, xlwt.Formula('SUM(B1,C1)')) # Should output "5" (B1[2] + C1[3])

#向单元格添加一个超链接
worksheet.write(0, 3, xlwt.Formula('HYPERLINK("http://www.baidu.com";"baidu")')) # Outputs the text "baidu" linking to http://www.baidu.com

#单元格合并
worksheet.write_merge(0, 0, 4, 5, 'First Merge') #合并0行的4到5列
worksheet.write_merge(1, 2, 4, 5, 'Second Merge') #合并1和2行的4到5列

#设置单元格内容的对其方式
alignment=xlwt.Alignment() ## Create Alignment
alignment.horz=xlwt.Alignment.HORZ_CENTER
alignment.vert=xlwt.Alignment.VERT_CENTER
style=xlwt.XFStyle()
style.alignment=alignment # Add Alignment to Style
worksheet.write(0, 6, 'alignment', style)

# 保存文件
workbook.save('data_test.xls')

Reference

Python3读取和写入excel表格数据