安装xlwt
pip install xlwt
创建workbook(创建excel)
#创建一个工作簿对象,设置编码格式为“utf-8”,默认格式是ASCII,为了方便写入中文,一般都要设置成UTF-8
workBook = xlwt.Workbook(encoding='utf-8')
创建sheet表
# 通过工作薄对象创建sheet,sheetName 要求长度小于31个字符,并且不能存在斜杠,否则会报错
sheet = workBook.add_sheet("sheetName")
写入数据
#首先需要在第0行写入表头,然后再写入后续数据,但是都是使用的write方法写入,只是坐标不一样
head = ['姓名','年龄','性别']
data = [['张三','19','男'],['刘雯雯','18','女']]
#循环写入表头
for i in head:
sheet.write(0,head.index(i),i)
#循环写入数据
for i in range(len(data)):
for j in range(len(data[i])):
sheet.write(i+1,j,data[i][j])
保存workbook
# 通过workBook对象的save方法保存文档,savePath可以是绝对路径,也可以是相对了路径
savePath = 'C:\\Users\\Administrator\\Desktop\\test.xls'
workBook.save(savePath)
完整示例
import xlwt
workBook = xlwt.Workbook(encoding='utf-8')
sheet = workBook.add_sheet("sheetName")
head = ['姓名', '年龄', '性别']
data = [['张三', '19', '男'], ['刘雯雯', '18', '女']]
for i in head:
sheet.write(0, head.index(i), i)
for i in range(len(data)):
for j in range(len(data[i])):
sheet.write(i + 1, j, data[i][j])
savePath = 'D:\\pythons2\\notes\\python\\test.xls'
workBook.save(savePath)
设置行列宽度
- sheet.col(0)表示获取表格列表A列对象,在通过width即可修改列宽
- xlwt中列宽默认为256*11
for x in head:
sheet.col(head.index(x)).width = 256 * 20
设置行的高度
- sheet.row(0)获取行对象
- set_style()用于设置样式
- set_style(xlwt.easyxf(‘font:height 512;’))设置行高
for i in range(len(data)):
sheet.row(i+1).set_style(xlwt.easyxf('font:height 512;'))
设置文本对其方式
在xlwt中,需要使用Alignment来设置单元格的对齐方式,其中horz代表水平对齐方式,vert代表垂直对齐方式。
- VERT_TOP = 0x00 上端对齐
- VERT_CENTER = 0x01 居中对齐(垂直方向上)
- VERT_BOTTOM = 0x02 低端对齐
- HORZ_LEFT = 0x01 左端对齐
- HORZ_CENTER = 0x02 居中对齐(水平方向上)
- HORZ_RIGHT = 0x03 右端对齐
style = xlwt.XFStyle() # 创建一个样式对象,初始化样式
al = xlwt.Alignment()
al.horz = 0x02 # 设置水平居中
al.vert = 0x01 # 设置垂直居中
style.alignment = al
for i in range(len(data)):
for j in range(len(data[i])):
sheet.write(i+1, j, data[i][j], style)
设置边框
xlwt要设置边框,需要使用Borders来设置,可以设置实线、虚线、没有边框三种,并且可以通过colour属性设置颜色。
- DASHED:虚线
- THIN:实线
- NO_LINE:没有边框
style = xlwt.XFStyle() # 创建一个样式对象,初始化样式
borders = xlwt.Borders()
#设置边框属性实线、黑色
borders.left = xlwt.Borders.THIN
borders.top = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left_colour = 0xff
borders.right_colour = 0xff
borders.bottom_colour = 0xff
borders.top_colour = 0xff
style.borders = borders
for i in range(len(data)):
for j in range(len(data[i])):
sheet.write(i+1, j, data[i][j], style)
综合演示代码
import xlwt
from datetime import datetime
import time
workBook = xlwt.Workbook(encoding='utf-8') # 创建execl文件对象,并设置字符编码
sheet = workBook.add_sheet("sheetName") # 创建sheet页
head = ['工单编号', '上报人', '上报时间', '发生位置', '工单状态']
data = [['YH202307050001', '枫铭', '2023-07-05 10:20:11', '幸福南路与盛安路交叉口往南200米公交车边上', '待处理'],
['YH202307050002', '枫铭', '2023-06-05 11:44:33', '古墩路718号106-107号 新时代互联广场对面的公园里', '已处理'],
['YH202307050003', '时空', '2023-07-05 15:22:55', '河道,拱康路,拱康路与管家漾支河交叉口东侧', '已处理'],
['YH202307050004', '枫铭', '2023-06-05 10:20:11', '浪漫和山(留和路)往白马山庄方向的路上', '待派单'],]
# 设置每列的宽度
sheet.col(head.index('工单编号')).width = 256*20
sheet.col(head.index('上报人')).width = 256*10
sheet.col(head.index('上报时间')).width = 256*20
sheet.col(head.index('发生位置')).width = 256*50
sheet.col(head.index('工单状态')).width = 256*15
# 创建样式对象
style = xlwt.XFStyle()
al = xlwt.Alignment()
al.horz = 0x02
al.vert = 0x01
style.alignment = al # 设置对其方式,垂直居中、水平居中
borders = xlwt.Borders()
borders.left = xlwt.Borders.THIN # 边框设置为实线
borders.top = xlwt.Borders.THIN
borders.right = xlwt.Borders.THIN
borders.bottom = xlwt.Borders.THIN
borders.left_colour = 0xff # 边框颜色为黑色
borders.top_colour = 0xff
borders.right_colour = 0xff
borders.bottom_colour = 0xff
style.borders = borders
for i in head: # 创建表头
sheet.write(0, head.index(i), i, style)
for i in range(len(data)):
sheet.row(i+1).set_style(xlwt.easyxf('font:height 512;')) # 设置行高
for j in range(len(data[i])):
sheet.write(i + 1, j, data[i][j], style)
date = int(time.mktime(datetime.now().timetuple()))
# savePath = 'D:\\pythons2\\notes\\python\\test.xls'
savePath = f'{date}test.xls' # 当前文件夹生成execl文件
workBook.save(savePath)