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 相关文章推荐
python多线程方式执行多个bat代码
Jun 07 Python
浅谈python中set使用
Jun 30 Python
Python字符串拼接六种方法介绍
Dec 18 Python
可能是最全面的 Python 字符串拼接总结【收藏】
Jul 09 Python
python numpy 反转 reverse示例
Dec 04 Python
python3 webp转gif格式的实现示例
Dec 10 Python
Python数组并集交集补集代码实例
Feb 18 Python
Python flask框架端口失效解决方案
Jun 04 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
pycharm无法导入lxml的解决办法
Mar 31 Python
pytorch中的numel函数用法说明
May 13 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 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
php PDO中文乱码解决办法
2009/07/20 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
php实现的生成排列算法示例
2019/07/25 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
Python操作串口的方法
2015/06/17 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Python3中exp()函数用法分析
2019/02/19 Python
Python自动抢红包教程详解
2019/06/11 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
Django自带的用户验证系统实现
2020/12/18 Python
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
工作表扬信的范文
2014/01/10 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
《雷雨》教学反思
2014/02/20 职场文书
大学军训感言200字
2014/02/26 职场文书
师德师风的心得体会
2014/09/02 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库