共计 3700 个字符,预计需要花费 10 分钟才能阅读完成。
在以前,商业剖析对应的英文单词是 Business Analysis,大家用的剖析工具是 Excel,起初数据量大了,Excel 应酬不过去了(Excel 最大反对行数为 1048576 行),人们开始转向 python 和 R 这样的剖析工具了
XlsxWriter | xlrd&xlwt | OpenPyXL | Microsoft Excel API | |
---|---|---|---|---|
介绍 | 能够创立 Excel 2007 或更高版本的 XLSX 文件 | 即 python-excel,含 xlrd、xlwt 和 xlutils 三大模块,别离提供读、写和其余性能 | 能够读写 Excel 2007 XLSX 和 XLSM 文件 | 间接通过 COM 组件与 Microsoft Excel 过程通信,调用其各种性能实现对 Excel 文件的操作 |
读 | ❌ | ✅ | ✅ | ✅ |
写 | ✅ | ✅ | ✅ | ✅ |
批改 | ❌ | ❌ | ⚠️ | ✅ |
.xls | ❌ | ✅ | ❌ | ✅ |
.xlsx | ✅ | ⚠️ | ✅ | ✅ |
大文件 | ✅ | ❌ | ✅ | ❌ |
性能 | 强 | 弱 | 个别 | 超强 |
速度 | 快 | 快 | 快 | 超慢 |
零碎 | 无限度 | 无限度 | 无限度 | Windows + Excel |
应用场景 | 要创立 XLSX 文件 <br/> 不须要读取已有文件 <br/> <br/> 须要实现比较复杂的性能 <br/> 数据量可能会很大 <br/> 须要跨平台 | 要读取 XLS 或 XLSX 文件 <br/> 要生成 XLS 文件 <br/> 须要的性能不太简单 <br/> 须要跨平台 | 要解决 XLSX 文件 <br/> 须要批改已有文件,或者在写入过程中须要一直批改 <br/> 须要的性能比较复杂 <br/> 数据量可能会很大 <br/> 须要跨平台 | 须要解决各种文件格式 <br/> 须要用到特地简单的性能 <br/> 在批改文件时,不心愿对原有信息造成任何意外毁坏 <br/> 数据量很小,或者违心期待 <br/> 仅在 Windows 中应用 |
XlsxWriter
Xlsx 是 python 用来结构 xlsx 文件的模块,能够向 excel2007+ 中写 text,numbers,formulas 公式以及 hyperlinks 超链接。
能够实现 xlsx 文件的自动化结构,包含:合并单元格,制作 excel 图表等性能:
1. 长处
一、性能比拟强
相对而言,这是除 Excel 本身之外性能最强的工具了。比方我就用到了它提供的:字体设置、前景色背景色、border 设置、视图缩放(zoom)、单元格合并、autofilter、freeze panes、公式、data validation、单元格正文、行高和列宽设置等等。
二、反对大文件写入
如果数据量十分大,能够启用 constant memory 模式,这是一种程序写入模式,失去一行数据就立即写入一行,而不会把所有的数据都放弃在内存中。
2. 毛病
一、不反对读取和批改
作者并没有打算做一个 XlsxReader 来提供读取操作。不能读取,也就无从批改了。它只能用来创立新的文件。我是利用 xlrd 把须要的信息读入后,用 XlsxWriter 创立全新的文件。
另外,即便是创立到一半 Excel 文件,也是无奈读取曾经创立进去的内容的(信息应该在,然而并没有相应的接口)。因为它的次要办法是 write 而不是 set。当你在某个单元格写入数据后,除非你本人保留了相干的内容,否则还是没有方法读出曾经写入的信息。从这个角度看,你无奈做到读出 -> 批改 -> 写回,只能是写入 -> 写入 -> 写入。
二、不反对 XLS 文件
XLS 是 Office 2013 或更早版本所应用的格局,是一种二进制格局的文件。XLSX 则是用一系列 XML 文件组成的(最初的 X 代表了 XML)一个压缩包。如果非要创立低版本的 XLS 文件,就请移步 xlwt 吧。
三、临时不反对透视表(Pivot Table)
3. 基本操作办法
- 创立 excel 文件
import xlsxwriter | |
f = xlsxwriter.Workbook() # 创立 excel 文件 |
- 创立工作表
worksheet1 = f.add_worksheet('操作日志') # 括号内为工作表表名
- 增加工作表款式
款式有很多属性,更多具体款式请参考官网文档 https://xlsxwriter.readthedocs.io。
bold = f.add_format({ | |
'bold': True, # 字体加粗 | |
'border': 1, # 单元格边框宽度 | |
'align': 'left', # 程度对齐形式 | |
'valign': 'vcenter', # 垂直对齐形式 | |
'fg_color': '#F4B084', # 单元格背景色彩 | |
'text_wrap': True, # 是否主动换行 | |
}) |
- 写入单个单元格数据
//row: 行,col:列,data: 要写入的数据, bold: 单元格的款式 | |
worksheet1.write(row, col, data, bold) |
- 写入一整行,一整列
// A1: 从 A1 单元格开始插入数据,按行插入,data: 要写入的数据(格局为一个列表 ), bold: 单元格的款式 | |
worksheet1.write_row(“A1”,data,bold) | |
// A1: 从 A1 单元格开始插入数据,按列插入,data: 要写入的数据(格局为一个列表 ), bold: 单元格的款式 | |
worksheet1.write_column(“A1”,data,bold) |
- 插入图片
// 第一个参数是插入的起始单元格,第二个参数是图片你文件的绝对路径 | |
worksheet1.insert_image('A1','f:\\1.jpg') |
- 写入超链接
worksheet1.write_url(row, col, "internal:%s!A1" % ("要关联的工作表表名"), string="超链接显示的名字")
- 插入图表
workbook.add_chartsheet(type="")参数中的 type 指的是图表类型,图表类型示例如下:[area:面积图,bar:条形图,column:直方图,doughnut:环状图,line:折线图,pie:饼状图,scatter:散点图,radar:雷达图,stock: 箱线图]
- 取得以后 excel 文件的所有工作表
workbook.worksheets()
workbook.worksheets() 用于取得当前工作簿中的所有工作表,这个函数的存在便当了对于工作表的循环操作,如果你想在当前工作簿的所有工作表的 A1 单元格中输出一个字符创‘Hello xlsxwriter’,那么这个命令就派上用场了。
- 敞开 excel 文件
workbook.close()
这个命令是应用 xlsxwriter 操作 Excel 的最初一条命令,肯定要记得敞开文件。
参考 https://www.jianshu.com/nb/32…
案例
import xlsxwriter | |
# 新建 excel 表 | |
workbook = xlsxwriter.Workbook('D:/hello.xlsx') | |
# 新建 sheet(sheet 的名称为 "sheet1")worksheet = workbook.add_worksheet() | |
# 定义表头内容 | |
Title = ['实例 ID', '实例配置', '实例名', '地区', '平安组', 'EIP'] | |
# 定义题目格局 | |
merge_format = workbook.add_format({ | |
'bold': True, | |
'border': 1, | |
'align': 'center', | |
'valign': 'vcenter', | |
'fg_color': '#E0FFFF' | |
}) | |
# 定义表头格局 | |
title_format = workbook.add_format({ | |
'bold': True, | |
'border': 1, | |
'align': 'center', | |
'valign': 'vcenter', | |
'fg_color': '#87CEFF' | |
}) | |
# 定义内容格局 | |
data_format = workbook.add_format({ | |
'border': 1, | |
'align': 'center', | |
'valign': 'vcenter', | |
'fg_color': '#EED8AE' | |
}) | |
# 拟数据 | |
data = [['i-1', '1C1G', 'demo1', '上海', 'sg-1', '172.20.2.10'], | |
['i-2', '1C1G', 'demo2', '郑州', 'sg-2', '172.20.2.11'], | |
['i-3', '1C1G', 'demo3', '北京', 'sg-3', '172.20.2.12']] | |
# 合并 A1 - F1 单元格作为题目,传入参数:1:合并单元格,2:题目文字,3:题目格局 | |
worksheet.merge_range('A1:F1', 'ECS 信息表', merge_format) | |
# 设置列宽,指定 A - F 的列宽为 25 | |
worksheet.set_column('A:F', 25) | |
# 设置行号,指定行数,高度,A1 为 0,A2 为 1,以此类推 | |
worksheet.set_row(0, 60) | |
# write_row,写行,传入参数:1:行,2:内容,3:格局 | |
worksheet.write_row('A2', Title, title_format) | |
i = 3 | |
for ECS in data: | |
worksheet.write_row('A' + str(i), ECS, data_format) | |
i += 1 | |
# 将 excel 文件保留敞开,如果没有这一行运行代码会报错 | |
workbook.close() |
在线练习:https://www.520mg.com/it