Python xlrd/xlwt 创建excel文件及常用操作
作者:淡怀 发布时间:2021-08-17 04:33:22
标签:Python,xlrd,xlwt,excel
一、创建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
self.__color_str = 'aqua 0x31\r\n\
black 0x08\r\n\
blue 0x0C\r\n\
blue_gray 0x36\r\n\
bright_green 0x0B\r\n\
brown 0x3C\r\n\
coral 0x1D\r\n\
cyan_ega 0x0F\r\n\
dark_blue 0x12\r\n\
dark_blue_ega 0x12\r\n\
dark_green 0x3A\r\n\
dark_green_ega 0x11\r\n\
dark_purple 0x1C\r\n\
dark_red 0x10\r\n\
dark_red_ega 0x10\r\n\
dark_teal 0x38\r\n\
dark_yellow 0x13\r\n\
gold 0x33\r\n\
gray_ega 0x17\r\n\
gray25 0x16\r\n\
gray40 0x37\r\n\
gray50 0x17\r\n\
gray80 0x3F\r\n\
green 0x11\r\n\
ice_blue 0x1F\r\n\
indigo 0x3E\r\n\
ivory 0x1A\r\n\
lavender 0x2E\r\n\
light_blue 0x30\r\n\
light_green 0x2A\r\n\
light_orange 0x34\r\n\
light_turquoise 0x29\r\n\
light_yellow 0x2B\r\n\
lime 0x32\r\n\
magenta_ega 0x0E\r\n\
ocean_blue 0x1E\r\n\
olive_ega 0x13\r\n\
olive_green 0x3B\r\n\
orange 0x35\r\n\
pale_blue 0x2C\r\n\
periwinkle 0x18\r\n\
pink 0x0E\r\n\
plum 0x3D\r\n\
purple_ega 0x14\r\n\
red 0x0A\r\n\
rose 0x2D\r\n\
sea_green 0x39\r\n\
silver_ega 0x16\r\n\
sky_blue 0x28\r\n\
tan 0x2F\r\n\
teal 0x15\r\n\
teal_ega 0x15\r\n\
turquoise 0x0F\r\n\
violet 0x14\r\n\
white 0x09\r\n\
yellow 0x0D'
self.color_list = [] # [[]] [['aqua', '0x31'], ['black', '0x08'], ...]
for color in self.__color_str.split('\r\n'):
color = color.split(' ')
self.color_list.append(color)
def write(self, out_file, data_body: List[list], sheet_name='sheet', frozen_row: int = 1, frozen_col: int = 0):
"""
写入数据
:param out_file: 保存文件(如:test.xlsx)
:param data_body: data_body[0]为表格第0行数据 data_body[0][0]为表格第0行第0列单元格值
:param sheet_name:
:param frozen_row: 冻结行(默认首行)
:param frozen_col: 冻结列(默认不冻结)
"""
# 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)
ali_horiz = 'align: horiz center' # 水平居中
ali_vert = 'align: vert center' # 垂直居中
fore_colour = 'pattern: pattern solid,fore_colour pale_blue' # 设置单元格背景色为pale_blue色
# 表头格式(垂直+水平居中、表头背景色)
style_header = xlwt.easyxf('{};{};{}'.format(fore_colour, ali_horiz, ali_vert))
# 表体格式(垂直居中)
style_body = xlwt.easyxf('{}'.format(ali_vert))
# 表头
for col in self.data:
# 默认列宽
if len(col) == 1:
sheet.write(0, self.data.index(col), str(col[0]), style_header)
# 自定义列宽
if len(col) == 2:
sheet.write(0, self.data.index(col), str(col[0]), style_header)
# 设置列宽
sheet.col(self.data.index(col)).width = 256 * col[1] # 256为基数 * n个英文字符
# 行高(第0行)
sheet.row(0).height_mismatch = True
sheet.row(0).height = 20 * 20 # 20为基数 * 20榜
# 表体
index = 1
for pro in data_body:
sheet.row(index).height_mismatch = True
sheet.row(index).height = 20 * 20 # 20为基数 * 20榜
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, style_body)
else:
sheet.write(index, self.data.index(d), str(value), style_body)
index += 1
# 冻结(列与行)
sheet.set_panes_frozen('1')
sheet.set_horz_split_pos(frozen_row) # 冻结前n行
sheet.set_vert_split_pos(frozen_col) # 冻结前n列
wd.save(out_file)
def color_test(self):
"""
测试颜色
"""
body_t = []
for color in self.color_list:
print(color)
body_t.append(color)
wd = xlwt.Workbook()
sheet = wd.add_sheet('sheet')
index = 0
for b in body_t:
ali = 'align: horiz center;align: vert center' # 垂直居中 水平居中
fore_colour = 'pattern: pattern solid,fore_colour {}'.format(
self.color_list[index][0]) # 设置单元格背景色为pale_blue色
style_header = xlwt.easyxf(
'{};{}'.format(fore_colour, ali))
sheet.write(index, 0, str(b), style_header)
sheet.col(0).width = 256 * 150 # 256为基数 * n个英文字符
index += 1
wd.save('颜色测试.xlsx')
# 测试颜色
# if __name__ == '__main__':
# header_t = [
# ['颜色']
# ]
# JarExcelUtil(header_t).color_test()
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、设置单元格对齐方式
# 方式1
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)
# 方式2(推荐)
ali_horiz = 'align: horiz center' # 水平居中
ali_vert = 'align: vert center' # 垂直居中
style_2 = xlwt.easyxf('{};{}'.format(ali_horiz, ali_vert))
sheet.write(0, 0, '第0行第0列单元格值', style_2)
3.5、设置单元格背景色
# 设置单元格背景色
fore_colour = 'pattern: pattern solid,fore_colour pale_blue' # 设置单元格背景色为pale_blue色 (具体颜色值 参考上面代码JarExcelUtil类中的color_test方法的运行结果)
style = xlwt.easyxf('{}'.format(fore_colour))
sheet.write(0, 0, '第0行第0列单元格值', style)
来源:https://www.cnblogs.com/danhuai/p/13538291.html
0
投稿
猜你喜欢
- 大概在2004年初的时候,我第一次买了一本很厚的书,名字或许叫《Dreamweaver MX从入门到精通》,很认真看着书并实践操作大约三分之
- 我希望大家看到该标题就能让想象到它的功能: 1、WITH TEMPL
- 本文仅针对 Ubuntu 操作系统环境,其他系统环境待日后遇到再补充。本文主要内容参考Linux公社(https://www.linuxid
- 这个是我在蓝色看到的,楼主想实现图片按比例缩放的功能(缩略图),把图片固定在一定的宽高范围内,不会变形,失真。例如:缩略图的框是94px*9
- 博主本地环境:VMwareCentos7.6django2.22python3.6出现这个的原因分析:第一:您在VMware中的虚拟主机地址
- Python的五个标准数据类型数字字符串列表元组字典一、数字不可变数据类型,存储值为数值1.创建对象,分配数值例:>>>
- 年前接到QCon的邀请,颇感意外。在我的印象里,QCon大会是后端开发工程师和架构师的技术大会。后来去QCon大会的官网搜索了下,发现原来Q
- 很高兴参加了这一期的薯片会,认识了几个朋友~~不料的却是今天我要来总结一下本次薯片会我们总共讨论了三个议题:A、 如何让“用户”更容易识别超
- 这篇文章主要介绍了python检测服务器端口代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 今天有朋友问我关于用JAVASCRIPT来进行页面各表单之间的数据传递的问题,我以前也写过,不过从来没有注意,今天总结了一下,希望能够给大家
- 如下所示:from pymongo import MongoClient#建立和数据库系统的连接,指定host及port参数client =
- 1. 问题使用PyCharm 创建完Django 项目 想登录admin 页面 却不知道用户名和密码。 用的默认sqlit2.解决办法2.1
- 今天学习php,当然是要先安装好运行环境了,phpstyudy是一个运行php的集成环境, 一键安装对新手很友好,与时作为一个新手,便跟着教
- 密码强度是一个很普遍的功能,比较简单,主要是怎么制定这个强度规则。现在需要升级密码强度的验证,以前的验证比较简单,现在已经不能满足需求了,现
- 前言相当不错的 Javascript 编程风格规范,建议大家采用此规范编写 Javascript。原文链接: http://dojotool
- 如何提高SQL Server数据库的性能,该从哪里入手呢?笔者认为,该遵循从外到内的顺序,来改善数据库的运行性能。如下图: 第一层
- Matplotlib配置了配色方案和默认设置,主要用来准备用于发布的图片。有两种方式可以设置参数,即全局参数定制和rc设置方法。查看matp
- 1.partial首先是partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象:>>&g
- 1 输出大写字母、小写字母、大小写字母、数字、大小写字母和数字1.1输出小写:找到小写a(97)到z(122)的的ASCII码,然后转义为字
- 手机控件查看工具uiautomatorviewer工具简介用来扫描和分析Android应用程序的UI控件的工具.如何使用 1.进入