使用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实现探测socket和web服务示例
Mar 28 Python
Python单链表简单实现代码
Apr 27 Python
node.js获取参数的常用方法(总结)
May 29 Python
python实现图片处理和特征提取详解
Nov 13 Python
简单实现python画圆功能
Jan 25 Python
python实现周期方波信号频谱图
Jul 21 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 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 水平的题目
2007/05/30 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
autoIMG 基于jquery的图片自适应插件代码
2011/03/12 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
jQuery点击导航栏选中更换样式的实现代码
2017/01/23 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
美术师范毕业生自荐信
2013/11/16 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
中学教代会开幕词
2016/03/04 职场文书