首页 技术 正文
技术 2022年11月12日
0 收藏 567 点赞 3,530 浏览 4527 个字
最近公司有项目需要导出数据到excel,首先想到了,tablib,xlwt,xlrd,xlwings,win32com[还可以操作word],openpyxl,等模块但是 实际操作中tablib 写入数据速度慢,操作简单,支持xlsx,[文件生成较大],貌似一次最多写入65536条行xlwt  写入速度比tablib 约快一倍,一次最大写入行数65536条,不支持xlsx 后缀文件,xlwings 写入速度和tablib貌似差不多,以上测试一次性写入65536条,45列
win32com 写入速度较快但是不支持跨平台,只能在win环境下openpyxl 简单看了下没有测试xlsxWriter 写入较快[貌似只有xlwt一半时间],支持设置样式,各种表格,函数等,测试数据8w条35列。 最大写入貌似1048576行16384列,只支持创建文件,所以笔者选择了xlsxwriter,实际学习中发现官方文档还是一如既往是英文的。以下是笔者自己整理的教程,不喜勿喷以上是笔者自己测试所得,实际效果要视应用场景,运行环境,数据量,机器配置,有所不同。如若读者自己所测 数据有所不同,欢迎指正。XlsxWriter是一个Python模块,可用于在Excel + XLSX文件中将文本,数字,公式和超链接写入多个工作表。它支持格式化等功能,包括:%兼容的Excel XLSX文件。完整格式化。合并细胞。定义名称。图表。自动筛选。数据验证和下拉列表。条件格式。工作表PNG / JPEG / BMP / WMF / EMF图像。丰富的多格式字符串。细胞评论。文本框。与熊猫整合。用于写入大文件的内存优化模式。它支持Python 2.5,2.6,2.7,3.1,3.2,3.3,3.4,3.5,3.6,Jython和PyPy,仅使用标准库。#英文文档:https://xlsxwriter.readthedocs.io/
安装pip install XlsxWriteorpip install --user XlsxWriter如果pip 无法使用可以使用easy_installeasy_install XlsxWriter#easy_install  百度百科:https://baike.baidu.com/item/easy_install#更多:http://peak.telecommunity.com/DevCenter/EasyInstall使用GitHub
$ curl -O -L http://github.com/jmcnamara/XlsxWriter/archive/master.tar.gz$ tar zxvf master.tar.gz$ cd XlsxWriter-master/$ python setup.py install
#Sample demo 创建一个excel文件import xlsxwriter as xwworkbook = xw.Workbook('hello_world.xlsx')worksheet=workbook.add_worksheet("sheet 名称")#还可以设置样式worksheet_classworksheet.write('A1','HelloWorld')row=col=worksheet.write(row,col,'第二种方式!')workbook.close()#会在当前目录生成一个hello_world.xlsx 文件
#XlsxWriter只能创建新文件,不能读取或者修改现有文件#write()方法支持两种形式的表示法来指定单元格的位置:行列表示法和A1表示法:
excel 中方法的使用 excel函数的使用workbook=xw.Workbook('Expenses01.xlsx')worksheet=workbook.add_worksheet('sheet 名称')expenses = (    [],    [],    [],    [],)#在XlsxWriter 中 行和列 都是零 索引,A1 是(0,0)  ; (0,0)是A1row=col=# for item,cost in (expenses):#     worksheet.write(row,col,item)#     worksheet.write(row,col+,cost)#     row+=for item,cost in expenses:    worksheet.write(row,col,item)    worksheet.write(row,col+,cost)    row+=worksheet.write(row,,'合计:')worksheet.write(row,,'=SUM(B1:B4)')
worksheet_2=workbook.add_worksheet('sheet_2')#在添加一个工作表worksheet_2.write(0,0,'写入内容')
#关闭excel 文件 释放资源workbook.close()
Smaple:添加样式workbook=xw.Workbook('Expenses01.xlsx')worksheet=workbook.add_worksheet('sheet 名称')expenses = (    [],    [],    [],    [],)row=col=#添加样式style = workbook.add_format(    {        'bold':True,#粗体        'bg_color':'yellow',#背景颜色        'align':'left',#水平方向:居左,        'valign':'top'#垂直方向:顶部    })style_2 =workbook.add_format(    {        'bold': True,  # 粗体        'bg_color': 'yellow',  # 背景颜色    })#美元符号money_style = workbook.add_format(  {    'num_format':'$#,##0'  })for item,cost in expenses:    worksheet.write(row,col,item)    worksheet.write(row,col+,cost)    row+=worksheet.write(row,,'合计:',style)#worksheet.write(row,,'=SUM(B1:B4)',style_2)worksheet.write(row,1,'=SUM(B1:B4)',money_style)worksheet_2=workbook.add_worksheet('sheet_2')worksheet_2.write(,,'写入内容')workbook.close()
from datetime import datetimeimport xlsxwriterworkbook = xlsxwriter.Workbook('Expenses03.xlsx')worksheet = workbook.add_worksheet()# 添加格式bold = workbook.add_format({})# 添加格式money_format = workbook.add_format({'num_format': '$#,##0'})# 添加格式date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})# 设置列的宽度worksheet.set_column(, , )worksheet.write('A1', 'Item', bold)worksheet.write('B1', 'Date', bold)worksheet.write('C1', 'Cost', bold)expenses = (    [],    [],    [],    [],)row =col = for item, date_str, cost in (expenses):    # 将日期字符串转换为datetime对象。    date = datetime.strptime(date_str, "%Y-%m-%d")    worksheet.write_string(row, col, item)    worksheet.write_datetime(row, col + , date, date_format)    worksheet.write_number(row, col + , cost, money_format)    row += worksheet.write(row, , '总和', bold)worksheet.write(row, , '=SUM(C2:C5)', money_format)workbook.close()更多方法:

处理数据的规则write()如下:



 

#excel 合并单元格,设置行高,设置样式

 

import xlsxwriter as xw

workbook = xw.Workbook(‘hello_world.xlsx’)
worksheet=workbook.add_worksheet(“sheet 名称”)#还可以设置样式worksheet_class

merge_format = workbook.add_format({
‘bold’: True,
‘border’: 6,
‘align’: ‘center’,#水平居中
‘valign’: ‘vcenter’,#垂直居中
‘fg_color’: ‘#D7E4BC’,#颜色填充
})

#合并单元格
worksheet.merge_range(‘B3:D4’, ‘Hello World !’, merge_format)

or

first_row=4

first_col=4

last_row=8

last_col=8

worksheet.merge_range(first_row,first_col,last_row,last_col,write_content,merge_format)

worksheet.set_column(‘B:D’, 12)#设置B-D的单元格宽度为12
worksheet.set_row(3, 30)#设置第4行的高度为30
worksheet.set_row(6, 30)#设置第7行的高度为30
worksheet.set_row(7, 30)#设置第8行的高度为30

workbook.close()

由于笔者项目 业务 只需要用到以上知识,因为项目进度,所以就没有接着学习下去了,大家可以自己去官网深入学习。https://xlsxwriter.readthedocs.io/
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,496
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,909
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,743
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,496
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,134
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,298