薪资表自动拆分和发送功能

起因是这样的,俺家妹子在单位兼一些hr的工作,每个月要负责给所有人发工资条。工资条是以excel文件的形式,作为Email的附件发出。她有一张总表,每个月发完薪水,她都要把总表拆成一个个单独的附件,附件名以每位同事的名字命名,比如“李四.xls”,然后用Foxmail建立一封新邮件,填上地址、标题、正文,再把对应的附件默默地拖到邮件中,点击“发送”。还好单位人不多,五六十号人,发完所有工资条邮件,大概花费一个多小时。虽然总时间不多,但是每个月的这个时候,总有一股莫名的烦躁感╭(╯^╰)╮,跟大姨妈一样。。。得知此事后,身为程序猿的俺,强烈要求表现一下,做一个自动拆分和发送邮件的功能
O(∩_∩)O~

程序的功能主要是“拆分”和“发送”,但是这两种功能我都没写过,一时间不知道该用啥语言、用啥库,或者市面上是否有可用的工具软件?经过一下午的百度,看了几十个帖子、尝试了N个号称“薪资管理发送软件”后,终于定下来,“拆分”功能用VBA,“发送”功能用python的email模块实现。

先说拆分功能,一张薪资表结构可能如下

hr妹子们可能想拆成这样

和这样

就是每个人一个附件,附件的形式是前面有公共的表头,后面是每个人具体的数据,通常是每个人对应一行。这里是3+1的形式,“3行表头,1行数据”。

拆分功能如下,打开薪资excel表,假设总表就是第一张表,Sheet1(通常都是Sheet1,如果不是,自行激活相应表格)。激活Sheet1之后,按Alt + F11,打开VBA编辑器,如图:

在左边的列表中双击“Sheet1(Sheet1)”这项,激活右边的代码窗口,输入拆分代码

我们可以看到代码很简单,有两个函数,一个叫SplitRow,另一个叫SplitAll,待会儿说这两个函数。

保存好之后,不用退出VBA编辑器,回到Sheet1表格,在excel上面菜单栏中选择“宏”命令,如红框中所示:

在弹出的宏命令选择框中,可以看到刚才输入的函数SplitAll,点击“执行”就可以了。

为什么这里看到的是“Sheet1.SplitAll”,而不是"SplitAll",还记得吗,我们刚才是在左边列表中双击了“Sheet1(Sheet1)”这项,因此输入的代码归属于Sheet1表格,所以完整的函数名叫“Sheet1.SplitAll”。

执行完之后,可以看到结果,这里是输出到c: 根目录,输出目录可以自行修改,在函数“SplitRow”中。

执行过程中会看到一张张的excel表格打开又关闭,不停的闪烁,请不要惊慌~~

可以看到每个人都对应一个附件,可以打开附件检查结果是否正确。

这里文件后缀名是.xlsx,如果需要是.xls,修改函数"SplitRow"

代码如下:

Sub SplitRow(i As Integer)

Dim dst_book As Object

Dim dst_sh As Object

Set dst_book = Workbooks.Add    ‘新增一个工作簿

Set dst_sh = dst_book.Sheets(1)  ‘新增一张表

Rows(1).Copy dst_sh.Rows(1)     ‘三行表头

Rows(2).Copy dst_sh.Rows(2)

Rows(3).Copy dst_sh.Rows(3)

Rows(i).Copy dst_sh.Rows(4)      ‘一行数据

dst_book.SaveAs "c:\" & Cells(i, 2).Value & ".xlsx"    ‘保存在c:\,文件名是单元格(i,2)的内容,后缀名是 .xlsx

dst_book.Close                                        ‘总表中每行第2个单元格数据为“姓名”,以这个人的“姓名”为导出文件名,比如“张三.xlsx”

Set dst_sh = Nothing

Set dst_book = Nothing

End Sub

Sub SplitAll()

Dim i As Integer

Dim n As Integer

n = Range("A65536").End(xlUp).Row

For i = 4 To n

If Cells(i, 1).Value <> "" Then     ‘对于每行数据,如果其第1个单元格不为空白,则进行导出

SplitRow (i)                                ‘总表中每行第1个单元格数据为“工号”,如果把这个人的“工号”删掉,则不会导出他的数据

End If

Next i

End Sub

如果不是“3行表头+1行数据”的形式,请自行修改代码。

PS:拆分五六十号人的数据大概需要十几秒,如果你们单位人很多,几百号人,还是要多等一会儿的。而且拆分期间,电脑最好不要用于其它工作。

时间: 2024-12-08 13:27:05

薪资表自动拆分和发送功能的相关文章

薪资表自动拆分和发送功能(二)

上一篇文章讲了薪资表的拆分功能,这里讲发送功能.<薪资表自动拆分和发送功能(一)>点击打开链接 发送功能是用python的email模块实现的,代码如下.运行环境是active python2.7 # -*- coding: cp936 -*- import smtplib from email.mime.text import MIMEText import email.mime.multipart from email.MIMEMultipart import MIMEMultipart

redmine邮件发送功能配置详解

redmine的邮件发送功能还是很有用的. 像项目有更新啦,任务分配啦,都能邮件发送的相关责任人. 我自己在linux服务器上安装并启动了redmine后,邮件一直发送了不了. 查了网上的资料,都是讲修改下配置文件就可以了,他们没错,只是没有讲全. 下面是我整理的一个redmine邮件发送功能设置的一个完整流程. 1. sendmail安装与检查 linux机器上安装的redmine要能发送邮件,先得是本机的sendmail功能是正常的. 查看sendmail进程是否已正常启动: $ ps au

用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇

在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还是很耐心的. 最终结论,是由于MailKit发送了两次EHLO命令,查看了MailKit源码后竟然发现,里面写了硬编码: if (host != "smtp.strato.de" && host != "smtp.sina.com") Ehlo (can

邮件发送功能开发

作为一名.Net开发,"邮件发送"功能的开发和使用是必须要掌握的,因为这个功能作为"消息推送"的一种手段经常出现在各种.Net系统中,所以本文将对.Net平台下的"邮件发送",做一个细致的分析! 一.who需要邮件功能 1.服务提供方:需提供邮件收发客户端或Web服务.如:QQ邮箱.GMail邮箱.126.163等知名邮件服务提供商.注:如果你使用的第三方不知名邮件服务商提供的邮件收发服务,通过其发出的邮件,可能会被其他知名邮件服务提供商的STM

一种红包发送功能的实现(redis+mysql+quartz)

这篇文章主要是对半年前开发的红包模块进行整理,把其中主要的设计思想以及具体的实现方案进行介绍,如有设计以及实现上的缺陷,或是存在漏洞,请大家批评指正! 红包功能大家都很熟悉了,那在这里就简单的对红包功能进行描述... 功能描述:红包业务主要的功能包括四部分,分别是红包发送,红包接收,红包回收,以及红包记录查询. 1)红包发送:发送者账户->红包中间层 2)红包接收:红包中间层->接收者账户 3)红包回收:红包中间层中若存在红包留存超过24小时,则将其回收,红包中间层->发送者账户 功能描

使用Email发送功能

上次CRM中用到了Email发送功能,虽然最后实现了,但对效果并不满意. 后来又找了些资料,重新整理了一份,废话不多说,直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Mail; namespace CRM.Business.Att { class KenceryCommonMethod {

ThinkPHP中邮件发送功能

初次使用thinkphp框架,开发一个邮件发送功能,由于对框架不熟悉折腾了几个小时终于成功了,以下是代码记录. 此函数只能在ThinkPHP中使用且需要phpmailer扩展的支持:phpmail的下载地址:https://code.google.com/a/apache-extras.org/p/phpmailer 将phpmailer解压后放置扩展放置到第三方类库扩展目录下: ThinkPHP/Extend/Vendor/文件夹下即可,并使用vendor方法来导入.更详细介绍参考:http:

远程短信发送功能

远程短信发送功能 拓波短信服务器(Smsserver)用于支持Turbomail 邮件服务器进行远程发送短信,当邮件服务器和短信猫分别 部署在不同的机器上,邮件服务器就需要通过短信服务器进行短信发送. 安装配置短信服务器(Smsserver)步骤: 安装短信服务器. Windows 安装方法: 解压 smsserver.zip 到C:或D:根目录即完成安装. Linux 安装方法: 执行 tar –vzxf smsserver.tgz 解压 smsserver.tgz 到根目录即完成安装. 配置

SAP B1 9.1开启邮件定时发送功能

SAP B1 9.1开启邮件定时发送功能需要几个步骤 1.服务端开启SBO Mailer 2.配置发件箱 3.设置警报提示管理 注意: 1.登陆人发件箱必须使用服务端上配置的发件箱,用户缺省设置邮箱也要为发件箱 2.设置好发送频率后,不管发件人是否登陆系统,邮件都会自动发送