使用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 06 Python
Python常用小技巧总结
Jun 01 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python算法之图的遍历
Nov 16 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
python的移位操作实现详解
Aug 21 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
python实现IOU计算案例
Apr 12 Python
使用Python实现批量ping操作方法
May 06 Python
Python中requests做接口测试的方法
May 30 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分页函数完整实例代码
2014/09/22 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
javascript instanceof 内部机制探析
2010/10/15 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
Python并发之多进程的方法实例代码
2018/08/15 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Python 忽略文件名编码的方法
2020/08/01 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
运动会方队口号
2014/06/07 职场文书
驾驶员安全责任书
2014/07/22 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
企业领导对照检查材料
2014/08/20 职场文书
高中运动会广播稿
2014/09/16 职场文书
祝寿主持词
2015/07/02 职场文书
小学生教师节广播稿
2015/08/19 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
React如何创建组件
2021/06/27 Javascript
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android