一、需求描述:
1、一张人员信息表中生成人员信息,某些列的字段要进行递增操作;
2、一个组织节点下存在1000人的限制要求;
3、一张Excel表格生成45000条数据;
二、Excel表格的表头如下:
三、相关操作
1、写Excel,首先需要安装xlwt模块;
2、可以采用pip的安装方式,安装方式如下图所示:
3、安装完成后,开始编写我们的程序:
首先需要明确几个函数的用法:
1、enumerate()
详细介绍:
2、format()
格式化数据
3、yield相关知识
详细介绍:http://blog.csdn.net/alvine008/article/details/43410079
写数据基本操作:
创建工作簿(workbook)和工作表(sheet):
import xlwt
workbook = xlwt.Workbook()
sheet = workbook.add_sheet("Sheet Name")
写单元格(cell):
sheet.write(0, 0, 'foobar') # row, column, value
对单元格应用样式(加粗为例):
style = xlwt.easyxf('font: bold 1')
sheet.write(0, 0, 'foobar', style)
具体实现代码:
#! -*- coding:utf-8 -*-
'''
1、第一步:我们需要引入xlwt模块:import xlwt
2、第二步:创建一个excel表格
3、第三步:定义需要自增字段的起始值
4、第四步:初始化表格:sheet页、样式、表头填充
5、第五步:按照每行进行数据写入,1个部门节点人数限制为1000人
'''
importxlwt
EXCEL_NAME= 'employees_mock.xls'PHONE_NUM= 13805710001EMP_NUM= 482501EMAIL_PREFIX= 333019041SUB_PHONE_NUM= 478180OFFICE_SUFFIX= 12771500VIRTUAL_NET= 123456TELGRAM_PHONE_NUM= 15370032950
defemploye(depart, count):for _ in range(1000):
name= u'工作人员{}'.format(count)
phone_num= str(PHONE_NUM +count)
gender= u'男'emp_num= str(EMP_NUM +count)
is_charger= u'否'job= u'开发'email= u'{}@foo.com'.format(EMAIL_PREFIX +count)
sub_phone_num= SUB_PHONE_NUM +count
addr= u'杭州滨江'remark= u'测试'office= u'信息安全管理员'position= u'管理岗位'bureau= u'发发发'office_phone_num= u'0571-{}'.format(OFFICE_SUFFIX)
v_net= u'192.168.1.{}'.format(count % 256)
tel_phone_num= str(TELGRAM_PHONE_NUM +count)
tel_net= u'192.168.0.{}'.format(count % 256)yield[
depart,
name,
phone_num,
gender,
emp_num,
is_charger,
job,
email,
sub_phone_num,
addr,
remark,
office,
position,
bureau,
office_phone_num,
v_net,
tel_phone_num,
tel_net
]
count+= 1
defstyle():##赋值style为XFStyle(),初始化样式
style =xlwt.XFStyle()#设置单元格内字体样式
font =xlwt.Font()
font.name= 'Times New Roman'font.bold=Falsereturnstyle#写Excel
defwrite_excel():
wb= xlwt.Workbook()#创建工作簿
sheet = wb.add_sheet(u'sheet1', cell_overwrite_ok=True)#创建第一个sheet页 第二参数用于确认同一个cell单元是否可以重设值#初始化表头列表
tb_head =[
u'部门',
u'姓名',
u'手机号',
u'性别',
u'工号',
u'是否此部门主管(是/否)',
u'职位',
u'邮箱',
u'分机号',
u'办公地点',
u'备注',
u'职务',
u'岗位',
u'办公室',
u'办公电话',
u'虚拟网',
u'电信手机号',
u'电信虚拟网']for i, item inenumerate(tb_head):
sheet.write(0, i, item, style())returnwbdefmain():
wb=write_excel()
table=wb.get_sheet(0)#insert 10k mock employee data
deps = [u'浙江省-反贪局-分局{}'.format(i + 1) for i in range(50)]#deps.extend(#[u'浙江省-工商局-分局{}'.format(i) for i in range(10)]#)#deps.extend(#[u'陕西省-计划生育局-分局{}'.format(i) for i in range(10)]#)
for c, dep inenumerate(deps):
count= 1000 * c + 1
for row, emp inenumerate(employe(dep, count)):for col, item inenumerate(emp):
table.write(row+count, col, item)#保存文件
wb.save(EXCEL_NAME)if __name__ == '__main__':
main()