使用python库xlsxwriter库来输出各种xlsx文件的示例
作者:piperck 发布时间:2022-04-27 14:50:30
标签:python,xlsxwriter,xlsx
功能性的文章直接用几个最简单的实现表达:
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()
来源:https://www.cnblogs.com/piperck/p/6363256.html


猜你喜欢
- 使用groupby([ ]).size()统计的结果,值相同的字段值会不显示如上图所示,第一个空着的行是982499 7 3388 1,因为
- DATE_FORMA T(date, format) 根据格式串format 格式化日期或日期和时间值date,返回结果串。可用DATE_F
- <%@ Language=VBScript %><%Option Explicit %><%Dim strUR
- 当下基本所有的目标检测类的任务都会选择基于深度学习的方式,诸如:YOLO、SSD、RCNN等等,这一领域不乏有很多出色的模型,而且还在持续地
- 一、决策树原理概述1.决策树原理决策树的分类原理,相当于程序中的if-then结构,通过条件判断,来决定结果。2.信息论①信息熵假设有32支
- EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL
- 用python2的小伙伴肯定会遇到字符编码的问题。下面对编码问题做个简单的总结,希望对各位有些帮助。 故事零:编码的定义 我们从“SOS“(
- 昨天打包下载了一个服务器整站,拿到这个*.mdb的文件后,却不知道怎么用,百度了一下,才知道是一种木马打包的形式文件,不能用WINrar来解
- 这篇文章主要介绍了用Python画一个LinkinPark的logo代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 最近再写openpose,它的网络结构是多阶段的网络,所以写网络的时候很想用列表的方式,但是直接使用列表不能将网络中相应的部分放入到cuda
- 前言:在appium中adb命令的使用必不可少,做android测试嘛,adb命令肯定肯定是每天都要用的啦,所以今天给特地写个博客吧!这里就
- 本文实例讲述了JS实现选择TextArea内文本的方法。分享给大家供大家参考。具体实现方法如下:<script type="
- 记住以下几点:直接子类化内置类型(如dict,list或str)容易出错,因为内置类型的方法通常会忽略用户覆盖的方法,不要子类化内置类型,用
- 以如下代码为例,我们在局部作用域内使用全局变量a,需要使用global关键字进行声明。否则代码会不可用。a = 100def fun():&
- 1 蚂蚁森林简介蚂蚁森林是一项旨在带动公众低碳减排的公益项目,每个人的低碳行为在蚂蚁森林里可计为"绿色能量"。"
- 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list、string、dict等等,这些对象都可以被称为可迭代对象。至于
- 本文实例讲述了Python双链表原理与实现方法。分享给大家供大家参考,具体如下:Python实现双链表文章目录Python实现双链表定义链表
- 分页加载功能大家遇到的应该会经常遇到,应用场景也很多,例如微博,QQ,微信朋友圈以及新闻类应用,都会有分页加载的功能,这不仅节省了我们用户的
- Python中try块可以捕获测试代码块中的错误。except块可以处理错误。finally块可以执行代码,而不管try-和except块的
- 一、MySQL Server层日志简介一个mysql client发起一个连接请求,处理请求的过程如下图所示:MySQL日志是在MySQL