用python实现给全公司发放工资条

来源:互联网 发布:清华镜像python 编辑:程序博客网 时间:2024/04/27 13:29

【背景】创业小公司的行政MM负责公司所有人的薪资情况,想给大家每个月发一下工资条,又没有有效的工具,有一天突然问我会写代码吗?作为测试工程师,基本上很少接触这些内容,正好这段时间有点空闲,也在学习python,那就搞起吧


【问题分析】

选定python脚本语言,是为了更好的了解自动化测试,按照需求,需实现小功能和对问题深入理解的过程记录一下

(1)原始文件存储

起初想读取csv文件,因为有现成的csv库供使用,如果采用csv文件,只能把每项数据都出来,以文件内容的形式放到邮件里展示。这里有一个问题,其实也是困扰我好几天,如何在邮件中写汉字,这个在后面介绍一下。


(2)邮件内容展示:

对邮件内容展示有三种设想

第一种:(以文本的形式展示)

亲爱的xxx:

本月工资如下:

总工资=xxx

交税=xxx

实发工资=xxx


第二种:(以表格的形式展示)

工号姓名邮箱身份证工资月份工资数量100张1lisi@xx.com1212323232322016-0630000

第三种:(以文本和附件的形式展示)

亲爱的xxx:

请查看附件文件xxx

解决问题的思路

首先,先把原始文件放到csv文件里面

从里面读取

选用第一种邮件展示方式,发送普通文本,发送普通文本的方法参照邮件,这个比较容易实现

后来觉得不好,咱们来点高级的,选用第二种把,可是python中间可以插入html绘制的表格,但表格中的内容如何填写就费了很大劲,

那咱们就用第三种展现方式,主要设计到python对excel文件的读取和写入,python都提供了专门的库去使用,把原始文件的数据提取出来,对每个员工创建一个excel文件,然后发送附件


发送邮件的几种方法在之前的博文中已经实现,控制excel的博文也已经有了,结合起来就好啦,下面看看代码是什么样的把:

{code}

# -*- coding: utf-8 -*-
import xlrd
import xlwt
from datetime import date,datetime
from time import sleep
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart


workbook=xlrd.open_workbook(r'C:\python27\salary.xlsx')
#打印出excel sheet 名称
text='李洪良'
#get data from salary file
salary_sheet=workbook.sheet_by_index (0)
'''
# salary_sheet.row_values(0) 文件中一行文件内容
print str(int(salary_sheet.cell(1,0).value))#number
print type(salary_sheet.cell(1,0).value)
print salary_sheet.cell(1,1).value #name
print type(salary_sheet.cell(1,1).value)
print salary_sheet.cell(1,2).value #email
print type(salary_sheet.cell(1,2).value)
print salary_sheet.cell(1,3).value #id
print type(salary_sheet.cell(1,3).value)
print salary_sheet.cell(1,4).value #month
print type(salary_sheet.cell(1,4).value)
print salary_sheet.cell(1,5).value#money
print type(salary_sheet.cell(1,5).value)
'''


for i in range(1,10):
    '''creat file for everyone'''
    f=xlwt.Workbook()
    sheet1=f.add_sheet(u'sheet1',cell_overwrite_ok=True)
    row0=[u'工号',u'姓名',u'邮箱',u'身份证',u'工资月份',u'工资数量']


    for j  in range(0,len(salary_sheet.row_values(0))):
        sheet1.write(0,j,row0[j])
        sheet1.write(1,j,salary_sheet.row(1)[j].value)
   
    new_sheet_name=str(int(salary_sheet.cell(i,0).value))+'_'+salary_sheet.cell(i,1).value+".xls"
    print new_sheet_name
    f.save(new_sheet_name)
    sleep(5)
    '''send email with attachment'''
    msg = MIMEMultipart()
    text='亲爱的xxx:\n请查看附件,谢谢'
    att1=MIMEText(text, "plain",'utf-8')
    msg.attach(att1)
    att2 = MIMEText(open(r'C:\python27'+'\\'+u'100_张1.xls', 'rb').read(), 'base64', 'gb2312')
    att2["Content-Type"] = 'application/octet-stream'
    att2["Content-Disposition"] = 'attachment; filename="2016-10.xls"'
    msg.attach(att2)


    #加邮件头
    msg['to'] = salary_sheet.cell(i,2).value
    msg['from'] = 'lihongliang@kunteng.org'
    msg['subject'] = "这是一个邮件".decode('utf-8')
    #发送邮件
    try:
        server = smtplib.SMTP()
        server.connect('smtp.exmail.qq.com')
        server.login('lihongliang@kunteng.org','Lhl123456')
        server.sendmail(msg['from'], msg['to'],msg.as_string())
        server.quit()
        print '发送成功'
    except Exception, e:  
        print str(e) 
        print ("==================")

{code}

0 0