活动地址:CSDN21天学习挑战赛
**
学习日记 Day10
**
1. Python操作Excel的库对比
python中有如下库可对Excel表格操作,对比如下:
本文讲解关于xlrd和xlwt模块,xlrd读取Excel表格,xlwt写入Excel表格。
2. xlrd模块读取Excel
xlrd模块用于读取Excel的数据,很快,支持.xls和.xlsx两种文件格式的读取。
2.1 安装xlrd模块
使用如下命令安装xlrd模块:
pip install xlrd
输入该命令后回车,显示如下表示安装成功:
2.2 使用xlrd模块对Excel的各种操作
xlrd模块读取Excel表格可以按照如下读取:
读取的表格(1.xlsx)内容:
示例代码:
import xlrd
path = "./1.xlsx"
# 1. 打开文件 xlrd.open_workbook(path)打开文件
wb = xlrd.open_workbook(path)
print("打开文件:",path,wb)
# 2. 获取所有表名 wb.sheet_names()获取
lst_sheet_names = wb.sheet_names()
print("当前表格包含的表有:",lst_sheet_names)
# 3. 指定sheet表
# 3.1 使用wb.sheet_by_index(索引) 利用索引顺序获取sheet表
sheet_1 = wb.sheet_by_index(0) # 获取第一个sheet表格
# 3.2 使用wb.sheet_by_name("sheet表名") 利用表名获取sheet表格
sheet_2 = wb.sheet_by_name(lst_sheet_names[0])
'''
4. 对sheet表的行操作
4.1 获取sheet表的总行数 sheet.nrows
4.2 获取某一行的所欲单元格的内容,使用 sheet.row(index)或sheet.row_slice(index)
返回列表,列表内是键值对,形如:[列1的类型:值,列2的类型:值...]
4.3 获取某一行所有单元格的内容,使用sheet.row_values(rowx,start_colx=0,end_colx=None)
返回列表,列表内容是该行的值,形如:[值1,值2...]
4.4 获取某一行的有效长度,使用sheet_row_len(rowx)
'''
rows = sheet_1.nrows
print("%s 表格有%d行" % (lst_sheet_names[0],rows))
print("第一行的内容:",sheet_1.row(1))
print("第一行的内容:",sheet_1.row_slice(1))
print("第一行的内容:",sheet_1.row_values(1))
print("第一行的有效长度为:",sheet_1.row_len(1))
# 5. 对sheet表的列操作,与对行的操作类似,只需把行操作中的row替换为col即可
# 与行不同的是,列操作中没有获取指定列的有效长度的函数
cols = sheet_1.ncols
print("%s表格有%d列" % (lst_sheet_names[0], cols))
print("第一列的内容:",sheet_1.col(1))
print("第一列的内容:",sheet_1.col_slice(1))
print("第一列的内容:",sheet_1.col_values(1))
显示结果:
对如上代码分析:
- 打开文件使用 wb = xlrd.open_workbook(path);
- 获取表名使用wb.sheet_names(),返回包含所有sheet表名的列表;
- 获取指定的sheet表格使用sheet1 = wb.sheet_by_index(index)或sheet1 = wb.sheet_by_name(sheet_name);
- 对sheet表格行操作或列操作:
–获取sheet表总行或总列数:sheet.nrows/sheet.ncols;
–返回某行的所有单元格的内容,sheet.row(1)或sheet.row_slice(1)返回包含键值对的列表;键值对是 列数据的类型:列内容
–返回指定行的所有单元格的内容组成的列表使用sheet.row_values(rowx,start_colx=0,end_colx=None);
–返回指定行的有效长度使用sheet.row_len(rowx),列没有该函数获取有效长度;
3. xlwt模块对Excel写入操作
3.1 安装xlwt模块
使用如下命令安装xlwt模块:
pip install xlwt
3.2 xlwt模块写单个数据
xlwt模块写单个数据的流程:
- 创建Excel表对象:workbook = xlwt.Workbook(encoding=‘utf-8’);
- 新建sheet表:worksheet = workbook.add_sheet(“Sheet1”);
- 写入数据到指定单元格:worksheet.write(0,0,“python”);
- 第一个参数是行,第二个参数是列,第三个参数是写入的数据;
- 保存文件:workbook.save(path);
示例:
import xlwt
# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf8')
# 2. 新建sheet表
worksheet = workbook.add_sheet('Sheet1')
# 3. 写入数据到指定单元格
worksheet.write(0, 0, "python")
# 4. 保存文件分两种格式
workbook.save('test.xls')
workbook.save('test.xlsx')
print("xlwt写Excel结束")
运行结束,生成了两个文件:test.xls和test.xlsx。
注: 经实践,test.xlsx文件可以生成,但是用Office Excel打不开。
3.3 xlwt模块写入多个文件
向Excel表格中写入多个数据示例:
import xlwt
# 要写入的数据
data_list = [
("Tom",20,"CAT"),
("Jerry",12,"MOUSE"),
("Jack",12,"DOG")
]
# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf-8')
# 2. 新建sheet表
worksheet = workbook.add_sheet("Sheet1")
# 3. 自定义列名
col1 = ["name","age","animals"]
# 4. 将自定义的列名写入到Sheet1表的第一行
for i in range(len(col1)):
worksheet.write(0,i,col1[i])
# 5. 将数据写入到表格中
for i in range(len(data_list)): # 按行写入
data = data_list[i]
for j in range(len(col1)):
worksheet.write(i+1,j,data[j])
# 6. 保存文件
workbook.save("test.xls")
生成的Excel表格:
保存多行数据到Excel中与保存单个数据类似,都需要先创建表格,然后创建sheet表,然后逐行写入数据。
3.4 设置Excel的样式
-
设置列宽
可以通过 worksheet.col(colx).width属性修改列的宽度 -
设置行高
按照如下修改行高
worksheet.row(rowx).height_mismatch=True # =True时更改height属性才有用
worksheet.row(rowx).height = 1600 # 要设置的行高
示例代码:
import xlwt
# 要写入的数据
data_list = [
("Tom",20,"CAT"),
("Jerry",12,"MOUSE"),
("Jack",12,"DOG")
]
# 1. 创建Excel表对象
workbook = xlwt.Workbook(encoding='utf-8')
# 2. 新建sheet表
worksheet = workbook.add_sheet("Sheet1")
# 3. 自定义列名
col1 = ["name","age","animals"]
# 4. 将自定义的列名写入到Sheet1表的第一行
for i in range(len(col1)):
worksheet.write(0,i,col1[i])
worksheet.col(i).width = 256*24
worksheet.row(0).height_mismatch = True
worksheet.row(0).height = 1200
# 5. 将数据写入到表格中
for i in range(len(data_list)): # 按行写入
data = data_list[i]
worksheet.row(i+1).height_mismatch = False
worksheet.row(i+1).height = 1600
for j in range(len(col1)):
worksheet.write(i+1,j,data[j])
# 6. 保存文件
workbook.save("test.xls")
print("保存Excel表格结束")
运行结束后结果文件:
相比之前保存的表格,列宽和第一行的行高都有变化,但是下面的三行行高并没有变化,因为下面三行的height_mismatch属性设置为False。
- 设置单元格风格,常用的设置单元格的属性有:
样式 | 说明 |
---|---|
xlwt.Font() | 字体设置 |
xlwt.Pattern() | 背景设置 |
xlwt.Borders() | 边框设置 |
xlwt.Alignment() | 对准设置 |
示例代码,设置表格的样式函数
import xlwt
def body_style():
# 创建一个样式对象,初始化样式
style = xlwt.XFStyle()
# 字体风格设置
font = xlwt.Font() # Font()创建Font对象
font.name = "SimSun" # 设置字体类型,宋体
font.colour_index = 4 # 设置字体颜色
font.height = 20*12 # 字体大小,12为字号,20是衡量单位
font.bont = True # 设置字体加粗
font.underline = True # 设置字体下划线
font.italic = True # 设置字体为斜体
# 背景设置
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN # 可以是 NO_PATTERN SOLID_PATTERN 或者 0x00 ~0x12
pattern.pattern_fore_colour = 4 # 设置背景颜色
# 边框设置
borders = xlwt.Borders() # 创建边框对象 DASHED:虚线 NO_LINE:没有边框
# 上下左右都添加边框
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
# 位置设置
alignment = xlwt.Alignment() # 创建位置对象
alignment.horz = 1 # 设置水平位置 0=左对齐 1=居中 2=右对齐
alignment.wrap = 1 # 设置自动换行
# 以上样式设置之后,全部加到style上
style.alignment = alignment
style.font = font
style.borders = borders
#style.pattern = pattern
return style
应用样式,先获取到要设置的样式,然后在写第一行内容时应用样式,如下:
style = xlwt_body_style.body_style()
# 4. 将自定义的列名写入到Sheet1表的第一行
for i in range(len(col1)):
worksheet.write(0,i,col1[i],style)
worksheet.col(i).width = 256*24
生成的表格如下,可以看到第一行的样式有所变化。
全文参考:
https://blog.csdn.net/yuan2019035055/article/details/125121936