Python xlrd/xlwt 创建excel文件及常用操作


Posted in Python onSeptember 24, 2020

一、创建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

Python xlrd/xlwt 创建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)

以上就是Python xlrd/xlwt 创建excel文件及常用操作的详细内容,更多关于python 操作excel的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
PyQT实现多窗口切换
Apr 20 Python
python3+PyQt5使用数据库表视图
Apr 24 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
Python单元测试与测试用例简析
Nov 09 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
Python pip配置国内源的方法
Feb 14 Python
解决tensorflow/keras时出现数组维度不匹配问题
Jun 29 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 Python
Python实现拼音转换
Jun 07 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 #Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 #Python
python 多线程共享全局变量的优劣
Sep 24 #Python
改变 Python 中线程执行顺序的方法
Sep 24 #Python
浅析Python 字符编码与文件处理
Sep 24 #Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 #Python
python判断元素是否存在的实例方法
Sep 24 #Python
You might like
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
PHP IPV6正则表达式验证代码
2010/02/16 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
浅谈php和.net的区别
2014/09/28 PHP
浅谈PHP中output_buffering
2015/07/13 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
2019/01/19 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python3 拼接字符串的7种方法
2018/09/12 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
python动态文本进度条的实例代码
2020/01/22 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
国庆节文艺活动方案
2014/02/03 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
Python实现查询剪贴板自动匹配信息的思路详解
2021/07/09 Python