xlsxwriter简单介绍:可以用于将文本,数字和公式写入多个工作表,支持格式设置,图像,图表,页面设置,条件格式设置,vba写入等功能,大多情况下,生成的文件和excel生成的文件100%相同,只支持单个单元格数据写入,无法读写现有的excel文件。
1、安装xlsxwriter
安装xlsxwriter
pip install xlsxwriter
2、创建excel文件
创建一个工作簿对象
wb = xlsxwriter.Workbook("filename.xlsx")
只有文件名的话,创建的文件会在程序运行所在的文件夹
可以以绝对路径,指定路径存放,如:
wb = xlsxwriter.Workbook("e:filename.xlsx")
添加工作表
使用wb对象的add_worksheet()方法
ws = wb.add_worksheet()
如果没有指定sheet的名称,默认以sheet1命名,后续再添加工作表,继续以sheet2,sheet3等自动命名,如需指定sheet名,可在方法中增加名字参数,如:
ws = wb.add_worksheet("案例")
操作完后,在没有使用close()方法前,都是在内存中,只有使用close()方法后才会在真正生成excel文件
生成excel的完整操作案例:
import xlsxwriter
wb = xlsxwriter.Workbook("e:filename.xlsx")
ws = wb.add_worksheet("案例")
wb.close()
注意:相同路径下,文件名相同,默认会覆盖原有文件
3、写入数据
上面的案例创建了一个空的excel文件,下面看如果创建一个有数据的excel文件
同样先引入模块,创建对象,添加工作表
import xlsxwriter
wb = xlsxwriter.Workbook("e:xlsxwriterfilename.xlsx")
ws = wb.add_worksheet("案例")
使用write(单元格位置,数据,格式)方法写入数据
单位格位置:
1、以行,列表示,0表示1行/列,2表示2行/列,如0,0代表1行1列, 1,0表示2行1列
ws.write(0,0'数据')
ws.write(1,0,'数据')
2、以单元格名称表示,如'A1', 'A2' 等
ws.write('A1','数据')
ws.write('A2','数据')
格式:为可选参数,如需使用格式,则需使用add_format()方法定义后添加
fm = wb.add_format()
添加格式方式有两种,一种是以字典表作为参数传入(推荐),另一种是以格式化方法的方式
1、字典表传值
pm = {
'bold' : True,
'font_name' : '微软雅黑'
}
fm = wb.add_format(pm)
ws.write('A2','数据',fm)
2、格式化方法
fm = wb.add_format()
fm.set_bold(True)
fm.set_font_name('微软雅黑')
ws.write('B2','数据',fm)
相关属性及方法名称如下(详细介绍可参考官网xlsxwriter格式):
综合案例:
import xlsxwriter
wb = xlsxwriter.Workbook("e:xlsxwriterfilename.xlsx")
ws = wb.add_worksheet("案例")
# 数据
data = [
('描述','属性','方法名称'),
('字体类型','font_name','set_font_name()'),
('字体大小','font_size','set_font_size()'),
('字体颜色','font_color','set_font_color()'),
('粗体','bold','set_bold()')
]
#字段格式
header = {
'bold' : True, #粗体
'font_name' : '微软雅黑',
'font_size' : 10,
'border' : True, #边框线
'align' : 'center', #水平居中
'valign' : 'vcenter', #垂直居中
'bg_color' : '#66DD00' #背景颜色
}
text = {
'font_name' : '微软雅黑',
'font_size' : 9,
'border' : True,
'align' : 'left', #左对齐
'valign' : 'vcenter'
}
headerpm = wb.add_format(header)
textpm = wb.add_format(text)
ws.set_column('C:C',13) #C列宽度
for row,rowdata in enumerate(data):
for col,coldata in enumerate(rowdata):
if row==0:
ws.write(row,col,coldata,headerpm)
else:
ws.write(row, col, coldata, textpm)
wb.close()
生成的文件如下: