Python 往Excel写数据
一、需求描述:
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人
'''
import xlwt EXCEL_NAME = 'employees_mock.xls' PHONE_NUM = 13805710001 EMP_NUM = 482501 EMAIL_PREFIX = 333019041 SUB_PHONE_NUM = 478180 OFFICE_SUFFIX = 12771500 VIRTUAL_NET = 123456 TELGRAM_PHONE_NUM = 15370032950 def employe(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 def style(): ##赋值style为XFStyle(),初始化样式 style = xlwt.XFStyle() #设置单元格内字体样式 font = xlwt.Font() font.name = 'Times New Roman' font.bold = False return style #写Excel def write_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 in enumerate(tb_head): sheet.write(0, i, item, style()) return wb def main(): 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 in enumerate(deps): count = 1000 * c + 1 for row, emp in enumerate(employe(dep, count)): for col, item in enumerate(emp): table.write(row + count, col, item) #保存文件 wb.save(EXCEL_NAME) if __name__ == '__main__': main()