出于近期处理数据比较多,重复的数据操作很繁琐且意义不大,打算使用python来处理这些事情,所以初步学习下python处理表格。
在学习之前先安装需要的库:
pip install xlwt
pip install xlrd
1. 创建excel并写数据
首先创建一个excel文件,并在其中创建一个工作簿,按照行列的索引写入数据。
import xlwt
#创建excel文件
wb = xlwt.Workbook()
#创建一个工作簿
ws = wb.add_sheet("summary")
#写入数据
ws.write(0,0,'test1')
ws.write(1,2,'test1') #ws.write(row,col,value) row/col都是从0开始
#保存excel文件
wb.save('data.xls')
结果在工作文件夹中就有data.xls文件,打开可以看到我们写入的内容:
2. 读表格数据
假设有一个表格文件data.xls,里面有一个工作簿summary,如图所示:
import xlrd
#打开文件
wb = xlrd.open_workbook('data.xls')
#查看文件中的工作簿个数和名字
ws_num = wb.nsheets
ws_names = wb.sheet_names()
print(f'文件中有{ws_num}个工作簿')
print(f'工作簿的名字为:{ws_names}')
#选择工作簿
ws1 = wb.sheet_by_index(0) #按照表格顺序读取第一个表格
ws2 = wb.sheet_by_name('summary') #按照表格名称读取叫‘summary’的表格
#打印工作簿的行数和列数
print(f'sheet里面有{ws1.nrows}行{ws1.ncols}列的数据')
#获取单元格的数据 不同的方法获取
print(f'第一行第二列的值是:{ws1.cell_value(0,1)}')
print(f'第一行第二列的值是:{ws1.cell(0,1).value}')
print(f'第一行第二列的值是:{ws1.row(0)[1].value}')
#获取整行或整列数据
print(f'第一行的数据:{ws1.row_values(0)}')
print(f'第一列的数据是:{ws1.col_values(0)}')
输出结果为:
3. 设置单元格样式
简单设置一些单元格样式,包括高度宽度、对齐方式、边框样式及颜色、背景颜色等,也可以设置字体,包括字体、字体颜色、字体大小、加粗、下划线、斜体等。
import xlwt
# import xlrd
wb = xlwt.Workbook()
ws = wb.add_sheet('data')
ft = xlwt.Font()
ft.name = '微软雅黑' #设置字体
ft.colour_index = 2 #设置颜色
ft.height = 11*20 #设置字体大小(20属于单位)
ft.bold = True #设置加粗
ft.underline = True #设置下划线
ft.italic = True #设置斜体
style = xlwt.XFStyle()
style.font = ft
ws.write(1, 1, '样式')
# ws.write(2, 2, '样式改变', style)
#设置单元格高度 第2行的高度(256是单位)
ws.row(2).height_mismatch = True #设置此项才能改变单元格高度
ws.row(2).height = 10*256
#设置单元格宽度 第2列的高度(256是单位)
ws.col(2).width = 20*256
#设置对齐方式
alg = xlwt.Alignment()
alg.horz = 2 #设置水平对齐方式,1:左对齐,2:居中,3:右对齐
alg.vert = 1 #设置垂直对齐方式,0:上对齐,1:居中,3:下对齐
style.alignment = alg
# ws.write(2, 2, '样式改变', style)
#设置边框
border = xlwt.Borders()
#边框格式 1:细实线,2:粗实线,3:细虚线,4:中细虚线,
#5:大粗实线,6:双线,7:细点虚线,8:大粗虚线,9:细点划线,
#10:粗点划线,11:细双点划线,12:粗双点划线,13:斜点划线
border.left = 1
border.right = 2
border.top = 3
border.bottom = 4
#设置边框颜色,具体数字代表的颜色见下图
border.left_colour = 1 #白色
border.right_colour = 2 #红色
border.top_colour = 3 #绿色
border.bottom_colour = 4 #蓝色
style.borders = border
#设置背景颜色
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN #设置背景颜色的模式是填实
pattern.pattern_fore_colour = 5
style.pattern = pattern
ws.write(2, 2, '样式改变', style)
wb.save('样式_test.xls')
输出结果为:
颜色和数字的对应关系可以参考这个图: