使用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开发windows GUI程序入门实例
Oct 23 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
python re模块findall()函数实例解析
Jan 19 Python
对pandas中Series的map函数详解
Jul 25 Python
解决python3运行selenium下HTMLTestRunner报错的问题
Dec 27 Python
python根据多个文件名批量查找文件
Aug 13 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
Python sep参数使用方法详解
Feb 12 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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
PHP+DBM的同学录程序(1)
2006/10/09 PHP
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP编写简单的App接口
2016/08/28 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
python实现简单爬虫功能的示例
2016/10/24 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python+os根据文件名自动生成文本
2019/03/21 Python
Python调用.NET库的方法步骤
2019/12/27 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
校园奶茶店创业计划书
2014/01/23 职场文书
责任担保书范文
2014/05/21 职场文书
写给女朋友的保证书
2015/05/09 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
创业计划书介绍
2019/04/24 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python