【Python】xlrd/xlwt操作excel及常用操作
一、代码
备注:封装好了(可直接调用)
"""-*- coding:utf-8 -*-
@Time :2020/8/20 21:02
@Author :Jarvis
@File :jar_excel_util.py
@Version:1.0
"""from typing import List
import xlwt
class JarExcelUtil:
def__init__(self, header_list: List[list]):
"""
:param header_list: 如下格式
例1:默认列宽
header_list = [
["序号"], # 表格第0列[此列表头名称]
["姓名"],
["性别"],
["爱好"],
["生日"]
]
例2:自定义列宽(列宽值为int类型 英文字符长度 如:10 表示列宽为10个英文字符长度)
header = [
["序号", 5], # 表格第0列[此列表头名称,列宽]
["姓名", 10], # 表格第1列[此列表头名称,列宽]
["性别", 10],
["爱好", 10],
["生日", 20]
]
"""
self.data = header_list
def write(self, out_file, data_body: List[list], sheet_name="sheet"):
"""
写入数据
:param out_file: 保存文件(如:test.xlsx)
:param data_body: data_body[0]为表格第0行数据 data_body[0][0]为表格第0行第0列单元格值
:param sheet_name:
"""
# step1 判断数据正确性(每行列数是否与表头相同)
count = 0
for pro in data_body:
if len(pro) != len(self.data):
raise Exception(
"data_body数据错误 第{}行(从0开始) 需为{}个元素 当前行{}个元素:{}".format(count, len(self.data), len(pro), str(pro)))
count += 1
# step2 写入数据
wd = xlwt.Workbook()
sheet = wd.add_sheet(sheet_name)
# 表头
for col in self.data:
# 默认列宽
if len(col) == 1:
sheet.write(0, self.data.index(col), str(col[0]))
# 自定义列宽
if len(col) == 2:
sheet.write(0, self.data.index(col), str(col[0]))
# 设置列宽
sheet.col(self.data.index(col)).width = 256 * col[1] # 15个英文字符
# 表体
index = 1
for pro in data_body:
for d in self.data:
value = pro[self.data.index(d)]
# 若值类型是int、float 直接写入 反之 转成字符串写入
if type(value) == int or type(value) == float:
sheet.write(index, self.data.index(d), value)
else:
sheet.write(index, self.data.index(d), str(value))
index += 1
wd.save(out_file)
if__name__ == "__main__":
header = [
["序号", 5],
["姓名", 10],
["性别", 10],
["爱好", 10],
["生日", 20]
]
# header = [
# ["序号"],
# ["姓名"],
# ["性别"],
# ["爱好"],
# ["生日"]
# ]
body = [
[1, "张三", "男", "篮球", "1994-07-23"],
[2, "李四", "女", "足球", "1994-04-03"],
[3, "王五", "男", "兵乓球", "1994-09-13"]
]
JarExcelUtil(header_list=header).write(out_file="测试.xlsx", data_body=body)
二、效果
生成的Excel
三、常用操作
3.1、设置行高
# 行高(第0行)sheet.row(0).height_mismatch = True
sheet.row(0).height = 20 * 20 # 20为基数 * 20榜
3.2、设置列宽
# 列宽(第0列)sheet.col(0).width = 256 * 30 # 256为基数 * 30个英文字符(约)
3.3、冻结(列与行)
# 冻结(列与行)sheet.set_panes_frozen("1")
sheet.set_horz_split_pos(2) # 冻结前2行
sheet.set_vert_split_pos(3) # 冻结前3列
# 冻结首行
sheet.set_panes_frozen("1")
sheet.set_horz_split_pos(1) # 冻结前1行(即首行)
3.4、设置单元格对齐方式
# 设置对齐方式style_1 = xlwt.XFStyle()
al_1 = xlwt.Alignment()
al_1.horz = xlwt.Alignment.HORZ_CENTER # 水平居中
al_1.vert = xlwt.Alignment.VERT_CENTER # 垂直居中
style_1.alignment = al_1
sheet.write(0, 0, "第0行第0列单元格值", style_1)
以上是 【Python】xlrd/xlwt操作excel及常用操作 的全部内容, 来源链接: utcz.com/z/530526.html