一、需求描述:
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()