python 导出数据到excel 中,一个好用的导出数据到excel模块,XlsxWriter

最近公司有项目需要导出数据到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 2007+ XLSX文件中将文本,数字,公式和超链接写入多个工作表。它支持格式化等功能,包括: 100%兼容的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 XlsxWrite
or
pip install --user XlsxWriter

如果pip 无法使用可以使用easy_install
easy_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 xw workbook = xw.Workbook('hello_world.xlsx') worksheet=workbook.add_worksheet("sheet 名称")#还可以设置样式worksheet_class worksheet.write('A1','HelloWorld') row=1 col=1 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 = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], )
#在XlsxWriter 中 行和列 都是零 索引,A1 是(0,0) ; (0,0)是A1 row
=0 col=0 # for item,cost in (expenses): # worksheet.write(row,col,item) # worksheet.write(row,col+1,cost) # row+=1 for item,cost in expenses: worksheet.write(row,col,item) worksheet.write(row,col+1,cost) row+=1 worksheet.write(row,0,'合计:') worksheet.write(row,1,'=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 = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], ) row=0 col=0 #添加样式 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+1,cost) row+=1 worksheet.write(row,0,'合计:',style) #worksheet.write(row,1,'=SUM(B1:B4)',style_2)
worksheet.write(row,1,'=SUM(B1:B4)',money_style) worksheet_2
=workbook.add_worksheet('sheet_2') worksheet_2.write(0,0,'写入内容') workbook.close()

 

 

from datetime import datetime
import xlsxwriter


workbook = xlsxwriter.Workbook('Expenses03.xlsx')
worksheet = workbook.add_worksheet()

# 添加格式
bold = workbook.add_format({'bold': 1})

# 添加格式
money_format = workbook.add_format({'num_format': '$#,##0'})

# 添加格式
date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})

# 设置列的宽度
worksheet.set_column(1, 1, 15)


worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Date', bold)
worksheet.write('C1', 'Cost', bold)


expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas', '2013-01-14', 100],
    ['Food', '2013-01-16', 300],
    ['Gym', '2013-01-20', 50],
)


row = 1
col = 0

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 + 1, date, date_format)
    worksheet.write_number(row, col + 2, cost, money_format)
    row += 1


worksheet.write(row, 0, '总和', bold)
worksheet.write(row, 2, '=SUM(C2:C5)', money_format)

workbook.close()


更多方法:
  • write_string()
  • write_number()
  • write_blank()
  • write_formula()
  • write_datetime()
  • write_boolean()
  • write_url()
 
    

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

 
    
  • 数据类型floatintlongdecimal.Decimal和 fractions.Fraction 使用写write_number()
  • 数据类型datetime.datetime使用写入 datetime.date datetime.timedatetime.timedeltawrite_datetime()
  • None和空字符串""使用write_blank()
  • 数据类型bool使用write_boolean()
 

 

 

 

 

 

#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/




 

转载于:https://www.cnblogs.com/yanxiatingyu/p/10186803.html

你可能感兴趣的:(python 导出数据到excel 中,一个好用的导出数据到excel模块,XlsxWriter)