使用python库xlsxwriter库来输出各种xlsx文件的示例


Posted in Python onSeptember 01, 2020

功能性的文章直接用几个最简单的实现表达:

xlsxwriter库的核心就是其Workbook对象。

创建一个指定名字的xlsx文件:

import xlsxwriter

filename = '/Users/piperck/Desktop/axiba.xlsx'
test_book = xlsxwriter.Workbook(filename)
worksheet = test_book.add_worksheet()
test_book.close()

创建一个Workbook的实例对象。可以传入一个文件名字,如果不想生成的文件在当前路径下面,可以在文件名字前面带上绝对路径。

add_worksheet()就是增加一个sheet

然后关闭这个对象,完成xlsx文件的生成。

创建一个指定名字的sheet并且为其添加一些数据:

import xlsxwriter

filename = '/Users/piperck/Desktop/axiba.xlsx'
test_book = xlsxwriter.Workbook(filename)
worksheet = test_book.add_worksheet('what')

expenses = (
  ['Rent', 1000],
  ['Gas',  100],
  ['Food', 300],
  ['Gym',  50],
)

# 定义起始的行列 会在这个基础上 行列各加一 作为初始行列
row = 0
col = 0

for item, cost in expenses:
  worksheet.write(row, col, item)
  worksheet.write(row, col+1, cost)
  row += 1

worksheet.write(row, col, '=sum(B0:B4)')
test_book.close()

我们可以使用得到的worksheet对象来添加其行列数据,如上所示。注意最后添加数据可以直接在第三个参数里面使用函数。

创建一个有指定样式的Workbook:

这个方法其实。。应该有非常多的参数,大家根据实际需要可以具体去查询更多的属性。这个样式要在Workbook的对象上加。

import xlsxwriter

filename = '/Users/piperck/Desktop/axiba.xlsx'
test_book = xlsxwriter.Workbook(filename)
worksheet = test_book.add_worksheet('what')
bold = test_book.add_format({'bold': True})

test_book.add_format()
expenses = (
  ['Rent', 1000],
  ['Gas',  100],
  ['Food', 300],
  ['Gym',  50],
)

# 定义起始的行列 会在这个基础上 行列各加一 作为初始行列
row = 0
col = 0

for item, cost in expenses:
  worksheet.write(row, col, item, bold)
  worksheet.write(row, col+1, cost)
  row += 1

test_book.close()

关于更多的参数,完全可以参看源代码里面的property字典下面初始化的那一堆东西,应该都是。

根绝着就能解决大部分问题了,如果有更多的需求就查阅下面的文档即可。

通用做法可能会基于此再做一些东西来包装 xlsxwriter 来让他更好用,这个就看大家对自己业务需要抽象的能力了。

Reference:

https://xlsxwriter.readthedocs.io  xlsxwriter doc

在当前文件夹生成

#coding=utf-8

def get_excel():
  """
  生成excel
  :return: 
  """
  import xlsxwriter
  workbook = xlsxwriter.Workbook("test.xlsx")
  worksheet = workbook.add_worksheet()
  # 样式
  formats = Struct() # 字典转化为点语法
  formats.base = {"font_name": u"宋体", "font_size": 11, "align": "center", "valign": "vcenter", "text_wrap": True}
  # formats.condition = dict_merge(formats.base, {"align": "left"})
  formats.bold = {"bold": True} # 加粗
  formats.row = dict_merge(formats.base, {"border": 1})
  formats.first_row = dict_merge(formats.row, {"bold": True}) # 首行
  formats.more_row = dict_merge(formats.row, {}) # 普通行
  formats.more_row_even = dict_merge(formats.row, {"bg_color": "#dddddd"}) # 普通行-奇数
  # 筛选条件行
  worksheet.merge_range('A1:F1', "") # 合并单元格
  conditions_list = [] # 条件
  province = '省'
  city = '市'
  county = '地区'
  name = '姓名'
  phone = '电话'
  date = '2018-6'
  if province or city or county:
    area_name = province + city + county
    conditions_list.append(workbook.add_format(formats.bold))
    conditions_list.append(u'地区:')
    conditions_list.append(u'%s ' % area_name)
  if name:
    conditions_list.append(workbook.add_format(formats.bold))
    conditions_list.append(u'姓名:')
    conditions_list.append(u'%s ' % name)
  if phone:
    conditions_list.append(workbook.add_format(formats.bold))
    conditions_list.append(u'手机:')
    conditions_list.append(u'%s ' % phone)
  if date:
    year, month = date[0:4], date[5:7]
    conditions_list.append(workbook.add_format(formats.bold))
    conditions_list.append(u'创建时间:')
    conditions_list.append(u'%s/%s ' % (year, month))
  if conditions_list: # 如果有条件
    worksheet.write_rich_string('A1', *conditions_list) # 首行

  # 表格首行
  cols = ["姓名", "电话", "地区"]
  for col_index, col in enumerate(cols):
    worksheet.write(1, col_index, col, workbook.add_format(formats.first_row)) # 第二行,col_index列, col_index从0开始,也就是第一列开始

  data_list = [{"name": "Spencer", "tel": "13888888888", "reg": "中国"},{"name": "Jeff", "tel": "139999999999", "reg": "台湾省"}]
  # 表格其余行
  for row_index, u in enumerate(data_list, start=2): # 因为前两行都被占用了,所以从第三行第一列开始
    # 斑马条
    if row_index % 2 != 0:
      row_format = formats.more_row # excel格式普通行
    else:
      row_format = dict_merge(formats.more_row_even) # excel格式奇数行
    
    # 日期格式
    date_format = dict_merge(row_format, {"num_format": "yyyy/mm/dd hh:mm"})
    # 靠左
    left_format = dict_merge(row_format, {"align": "left"}) 

    # 第一个参数:行,第二个参数:列,第三个参数:数据,第四个参数:属性
    worksheet.write(row_index, 0, u['name'], workbook.add_format(row_format))
    worksheet.write(row_index, 1, u['tel'], workbook.add_format(row_format))
    worksheet.write(row_index, 2, u['reg'], workbook.add_format(row_format))

    # 列宽 
    # 第一个参数是第几列开始,第二个人参数是从第几列结束
    # 比如下方第一个就是设置第一列为20,第二个就是设置第二列为10,第三个就是设置3到6列为20
  worksheet.set_column(0, 0, 20)
  worksheet.set_column(1, 1, 10)
  worksheet.set_column(2, 5, 20)
  workbook.close()

def dict_merge(*args):
  """
  功能说明:合并字典
  """
  all = {}
  for arg in args:
    if not isinstance(arg, dict):
      continue
    all.update(arg)
  return all

class Struct(dict):
  """
  - 为字典加上点语法. 例如:
  >>> o = Struct({'a':1})
  >>> o.a
  >>> 1
  >>> o.b
  >>> None
  """

  def __init__(self, dictobj={}):
    self.update(dictobj)

  def __getattr__(self, name):
    # 如果有则返回值,没有则返回None
    if name.startswith('__'):
      raise AttributeError
    return self.get(name)

  def __setattr__(self, name, val):
    self[name] = val

  def __hash__(self):
    return id(self)

if __name__ == '__main__':
  get_excel()

到此这篇关于使用python库xlsxwriter库来输出各种xlsx文件的示例的文章就介绍到这了,更多相关python xlsxwriter输出xlsx内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
Python的Django框架中TEMPLATES项的设置教程
May 29 Python
Python文件和流(实例讲解)
Sep 12 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
python虚拟环境迁移方法
Jan 03 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
浅析Python 引号、注释、字符串
Jul 25 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 #Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 #Python
Python2及Python3如何实现兼容切换
Sep 01 #Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 #Python
python 将列表里的字典元素合并为一个字典实例
Sep 01 #Python
Python如何截图保存的三种方法(小结)
Sep 01 #Python
Python连接mysql方法及常用参数
Sep 01 #Python
You might like
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
ThinkPHP分页实例
2014/10/15 PHP
JavaScript toFixed() 方法
2010/04/15 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
Python解决鸡兔同笼问题的方法
2014/12/20 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python删除不需要的python文件方法
2018/04/24 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python列表list操作相关知识小结
2020/01/29 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
自荐信结尾
2013/10/27 职场文书
美丽人生观后感
2015/06/03 职场文书
婚宴新郎致辞
2015/07/28 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL