需要从数据库读取日志生成相应的 docx,xlsx 文件做相应的记录

所以自然要用到docx, xlsxwriter 库

但是这些库的应用场景非常广泛,任何需要对 word,excel 文件执行重复性操作的工作,都可以使用 python 来帮我们完成

xlsxwriter 库

文章结构

  一、xlsxwriter 基本用法,创建 xlsx 文件并添加数据

  二、xlsxwriter 格式处理,将待添加数据转换成相应的格式,添加到 xlsx 文件中

  三、xlsxwriter 添加表格,在 xlsx 文件中添加表格

  四、深入理解格式(Format Class),并运用

一、xlsxwriter 基本用法,创建 xlsx 文件并添加数据

   官方文档:http://xlsxwriter.readthedocs.org/  

  xlsxwriter 可以操作 xls 格式文件

  注意:xlsxwriter 只能创建新文件,不可以修改原有文件。如果创建新文件时与原有文件同名,则会覆盖原有文件

  Linux 下安装: sudo pip install XlsxWriter

  Windows 下安装: pip install XlsxWriter

  基本用法:

 #!/usr/bin/python
#coding: utf-8 import xlsxwriter #创建一个新的xlsx文件(如果原有同名文件会被覆盖)
workbook = xlsxwriter.Workbook("Expenses01.xlsx") #创建一个新的表单,默认名称为 “sheet1”,输入字符参数可指定名称
worksheet = workbook.add_worksheet() expenses = (
['Rent', 1000],
['Gas' , 100],
['Food', 300],
['Gym' , 50],
) #worksheet 默认是从0行、0列开始计数
row = 0
col = 0 #worksheet.write 方法将数据写入 xlsx 表格中
#参数依次为:行号、列号、数据、[格式]
for item, cost in (expenses):
worksheet.write(row, col , item)
worksheet.write(row, col + 1, cost)
row += 1 #显式关闭workbook,若不显式指定,则作用域结束后自动关闭
workbook.close()

  效果展示:

二、xlsxwriter 格式处理,将待添加数据转换成相应的格式,添加到 xlsx 文件中

  先设置格式,使用方法:workbook.add_format

  再指定格式写入,使用方法:worksheet.write_string

 #!/usr/bin/python
#coding: utf-8 from datetime import datetime
import xlsxwriter workbook = xlsxwriter.Workbook('Expenses02.xlsx')
worksheet = workbook.add_worksheet() #设定格式,等号左边格式名称自定义,字典中格式为指定选项
#bold:加粗,num_format:数字格式
bold_format = workbook.add_format({'bold':True})
money_format = workbook.add_format({'num_format':'$#,##0'})
date_format =workbook.add_format({'num_format':'mmmm d yyyy'}) #将二行二列设置宽度为15(从0开始)
worksheet.set_column(1, 1, 15) #用符号标记位置,例如:A列1行
worksheet.write('A1', 'Item', bold_format)
worksheet.write('B1', 'Cost', bold_format)
worksheet.write('C1', 'Cost', bold_format) expenses = (
['Rent', '2016-03-11', 1000],
['Gad', '2016-03-12', 100],
['Food', '2016-03-13', 400],
['Gym', '2016-03-14', 50],
) row = 1
col = 0 for item, date_str, cost in (expenses):
#将数据格式转化为Python datetime.datetime 格式
#之后用write_datetime方法录入日期格式
date = datetime.strptime(date_str, "%Y-%m-%d") #使用write_string方法,指定数据格式写入数据
worksheet.write_string(row, col, item)
worksheet.write_datetime(row, col + 1, date, date_format)
worksheet.write_number(row, col + 2, cost, money_format)
row += 1 worksheet.write(row, 0, 'Total', bold_format)
worksheet.write(row, 1, '=SUM(B2:B5)', money_format) workbook.close()

  效果展示:

  

  写入日期格式时,指定对象要是 Python 的 datetime.datetime 格式

  使用 workbook.add_format 绑定时,可以指定如下格式

 

 三、xlsxwriter 添加表格,在 xlsx 文件中添加表格

 #!/usr/bin/python
#coding: utf-8 import xlsxwriter workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet() #新建图标对象
chart = workbook.add_chart({'type': 'column'}) #向 excel 中写入数据,建立图标时要用到
data = [
[1, 2, 3, 4, 5],
[2, 4, 6, 8, 10],
[3, 6, 9, 12, 15],
] worksheet.write_column('A1', data[0])
worksheet.write_column('B1', data[1])
worksheet.write_column('C1', data[2]) #向图表中添加数据,例如第一行为:将A1~A5的数据转化为图表
chart.add_series({'values': '=Sheet1!$A$1:$A$5'})
chart.add_series({'values': '=Sheet1!$B$1:$B$5'})
chart.add_series({'values': '=Sheet1!$C$1:$C$5'}) #将图标插入表单中
worksheet.insert_chart('A7', chart) workbook.close()

  效果展示:

四、更多可用的单元格式对象(Format Class)

  ecxel 中每一个单元,都有如下属性:字体(fonts)、颜色(colors)、模式(patterns)、边界(borders)、alignment、number formatting

  设置属性:

format = workbook.add_format()

#用对象接口设置格式属性
format.set_bold()
format.set_font_color('red') #用字典设置格式属性
property = {
'bold': True,
'font_color': 'red'
}
format = workbook.add_format(property)

  更多相关参见:http://xlsxwriter.readthedocs.org/format.html

随机推荐

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(68)-微信公众平台开发- 资源环境准备

    系列目录 前言: 本次将学习扩展企业微信公众号功能,微信公众号也是企业流量及品牌推广的主要途径,所谓工欲善其事必先利其器,调试微信必须把程序发布外网环境,导致调试速度太慢,太麻烦! 我们需要准备妥当才 ...

  2. App前后台判断

    http://blog.csdn.net/vpractical/article/details/51034360 需求是计算app在后台的时间,当返回前台时,根据时间差来做相应的操作. 思路是让app ...

  3. BZOJ3226: [Sdoi2008]校门外的区间

    感觉很有趣的题呢. 每个点拆成两个,线段树维护. 不过这题难点其实在输入输出. #include<bits/stdc++.h> #define N (1<<17) #defin ...

  4. Pinyin 输入法安装 opensuse 13 gnome

    1 安装 拼音输入法 zypper in pinyin      (scim 包含) 2 安装包 scim,scim-m17n,scim-pinyin,scim-qtimm,scim-tables,s ...

  5. cannot modify header information 关于实现widget页面跳转的问题

    查找网上解决此问题的方法多是一样的,不过今天又遇到了这样的问题.试过之后发现可行: 在C盘的WINDOWS或者你的PHP文件夹中找到php.ini 这个配置文件,然后查找一项:output_buffe ...

  6. 用BroadcastReceiver监听网络状态的变化

    在用户浏览网络信息时,如果网络突然断开,可以及时的提醒用户网络已断开.要实现这个功能,我们可以实现一个广播接收者来接收网络状态改变的广播,当由连接状态变为断开状态时,系统会发送一条广播,广播接收者接收 ...

  7. HTTP断点续传(分块传输)(HTTP头格式非常清楚)

    简述 断点续传:指的是在上传/下载时,将任务(一个文件或压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传/下载,如果碰到网络故障,可以从已经上传/下载的部分开始继续上传/下载未完成的部分, ...

  8. Java图形化界面设计——布局管理器之null布局(空布局)

    一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局. 操作方法: 1)       首先利用setLayout(null)语句将容器的布局设置为null布局(空布局 ...

  9. 关于HTML应用中的实操细节

    在编写HTML程序时,初阶段在打编码时容易忽视语法方面的问题,如大小写,中英文切换标点等.正常在编码时出现语法问题自己很难发现,所以刚开始练习特别要注重语法方面的规范,另外在编码时要有规范的书写方式, ...

  10. 深入理解BERT Transformer ,不仅仅是注意力机制

    来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...