前言

  上周末,XX给我抱怨:因为计算绩效奖金,把2个人的工资发错了,还被扣了500元。问的缘由得知,她每个月要处理十来个excel表格,每次都要手动修改里面的值,如果修改了一处,其他地方也要修改,然后还要多处地方核对。导致光这件事情就要消耗三四天,伤神费力。

我就问她,整个是不是都是机械性重复的工作,如果是的话,完全可以用电脑来代替。然后我就帮她找工具来优化她的工作,减少出错机会。

现状

  1. 目前他们公司总共有四五十人;
  2. 需要整理的excel有12份;
  3. excel间有很多重复数据,同样的数据存在在多分表中;
  4. excel之间相互引用数据很频繁,杂乱,牵一发而动全身。

两种方案

  1. 使用HRM管理系统,在网上找到三套有源码的软件:

    • 仅仅在github上面找到一个中文的系统 hrms(github大量英文系统)。--需要自己找服务器部署
    • 悟空HRM,PHP开源,文档也比较详细,中文。试用了一下在线版本,功能无法满足需求,需要二次开发,同步需要服务器部署。
    • OrangeHRM,是阿里云市场里面,也需要购买服务器。

    总结:现在目前找到的都是web版的系统,都需要在线部署。没有找到桌面版本,可以立即使用的那种。都不太适合目前的情况。

  2. 使用Excel自带的函数和宏,来实现简化实际工作的,最终实现此方案
    • 重新梳理Excel间的关系,提取出:原始数据、规则(函数计算后的数据);
    • 原始数据,抽取出来作为独立的Excel,类似于数据库的概念:
      • 稳定数据:不经常变动的数据,如:人员基本信息,固定工资等;
      • 月数据:每月统计都会发生变化的数据,如:考勤数据,绩效等;
    • 规则,编辑成Excel模板文件(*.xltx),里面一定不存在原始类的数据:
      • 引用:引用自原始数据,所有引用只能来源原始数据,不能出现引用引用的数据;
      • 计算公式:使用excel的函数,如:=sum()等;
    • 使用VBA宏,根据原始数据和模板文件,生成不带公式的纯xlsx文件。目的,不依赖其他文件。

宏代码

  实现功能(下载demo):

  1. 批量读取模板文件,生成xlsx文件;官方文档另存的枚举类型
  2. 替换掉excel中的公式,只显示值。
 Sub ChangeFileFormat(xltxFolder, xlsxFolder)

     Dim strCurrentFileExt   As String
Dim strNewFileExt As String
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim xlFile As Workbook
Dim strNewName As String
Dim strXltxFolderPath As String
Dim strXlsxFolderPath As String Set objFSO = CreateObject("Scripting.FileSystemObject") strCurrentFileExt = ".xltx"
strNewFileExt = ".xlsx" strXltxFolderPath = ThisWorkbook.Path & "\" & xltxFolder & "\"
strXlsxFolderPath = ThisWorkbook.Path & "\" & xlsxFolder & "\" If Not objFSO.FolderExists(strXltxFolderPath) Then '判断指定文件夹是否存在
MsgBox "【模板文件】文件夹不存在"
Exit Sub
End If If Not objFSO.FolderExists(strXlsxFolderPath) Then '判断指定文件夹是否存在
fs.CreateFolder strXlsxFolderPath
End If Set objFolder = objFSO.getfolder(strXltxFolderPath)
For Each objFile In objFolder.Files '循环所有的模板文件
strNewName = objFile.Name
If Right(strNewName, Len(strCurrentFileExt)) = strCurrentFileExt Then
Application.AskToUpdateLinks = False '关闭程序询问更新链接提示
Application.DisplayAlerts = False
ThisWorkbook.UpdateLinks = xlUpdateLinksAlways '更新链接 Set xlFile = Workbooks.Open(objFile.Path, , True) '读取模板文件
For Each sh In xlFile.Sheets '替换文件中的公式
sh.UsedRange.Value = sh.UsedRange.Value
Next strNewName = Replace(strNewName, strCurrentFileExt, strNewFileExt) '替换文件名为新的文件名
Select Case strNewFileExt
Case ".xlsx"
xlFile.SaveAs strXlsxFolderPath & strNewName, XlFileFormat.xlOpenXMLWorkbook '保存为不带宏的excel
Case ".xlsm"
xlFile.SaveAs strXlsxFolderPath & strNewName, XlFileFormat.xlOpenXMLWorkbookMacroEnabled '保存为带宏的excel
End Select
xlFile.Close
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
End If
Next objFile ClearMemory:
strCurrentFileExt = vbNullString
strNewFileExt = vbNullString
Set objFSO = Nothing
Set objFolder = Nothing
Set objFile = Nothing
Set xlFile = Nothing
strNewName = vbNullString
strFolderPath = vbNullString
End Sub

总结

  在这个过程中,考虑的时候,使用到了:模块,数据唯一性,避免交叉引用,这些开发中的经验。

  其实我觉得,整个过程中,VBA的编写占据了我最多的时间。查资料,找文档。(百度就是个大坑!!!)

  不熟悉Excel函数导致,当我写完一个宏的时候,发现VLOOKUP已经早就实现这个功能了。

使用软件开发的部分思想,帮助HR处理Excel。的更多相关文章

  1. TCL校园招聘——软件开发工程师(java) 只招5个。。。

    简介 TCL集团股份有限公司创立于1981年,是全球性规模经营的消费类电子企业集团之一,广州2010年亚运会合作伙伴,总部位于广东省惠州市仲恺高新区TCL科技大厦.旗下拥有TCL集团.TCL多媒体科技 ...

  2. 敏捷软件开发VS传统软件工程

    敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同 ...

  3. Atitit.软件开发的三层结构isv金字塔模型

    Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...

  4. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  5. python基础之迭代器、装饰器、软件开发目录结构规范

    生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大 ...

  6. 软件开发学习笔记 <二>软件开发模型、Up、Rup、敏捷Up

    软件开发过程(process) 是一个将用户需求转化为软件系统所需要的活动的集合. 软件生命周期(SDLC,Software Devlopment Life Cycle) 软件从孕育.诞生.成长.成熟 ...

  7. Python_Day5_迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 1.列表生成式,迭代器&生成器 列表生成 >>> a = [i+1 ...

  8. Atitit.研发管理--提升效率--软件开发方法DSM总结o99

    Atitit.研发管理--提升效率--软件开发方法DSM总结o99 1. 什么是DSM? 1 2. DSM使用的语言DSL 2 3. 模型的优点 2 4. DSM 跟与MDA区别 2 5. MDA的实 ...

  9. 敏捷软件开发(1)--- STATE 模式

    如果状态在运行过程中,不停的切换和改变,我们怎么办? 状态的迁移是我们生活和工程中非常普遍的一个概念.于是在数学上有一种理论来分析和解决这个问题. 有限状态机理论是一个非常成熟的理论,所有动作和流程的 ...

随机推荐

  1. Html5语义化标签详解及其兼容性处理

    <header></header> 页眉 主要用于页面的头部的信息介绍,也可用于板块头部 <hgroup></hgroup> 页面上的一个标题组合 一个 ...

  2. yarn工作流程

    YARN 是 Hadoop 2.0 中的资源管理系统, 它的基本设计思想是将 MRv1 中的 JobTracker拆分成了两个独立的服务 : 一个全局的资源管理器 ResourceManager 和每 ...

  3. 【JAVAEE学习笔记】hibernate02:实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示

    一.hibernate中的实体规则 实体类创建的注意事项 1.持久化类提供无参数构造 2.成员变量私有,提供共有get/set方法访问.需提供属性 3.持久化类中的属性,应尽量使用包装类型 4.持久化 ...

  4. 史上最完整Hadoop2.x完全分布式安装部署-小白也能学会

    一.环境要求: 1.        虚拟机安装并设置网络: 2.        修改主机地址映射: 3.        必备软件:Jdk.Development Tools   Development ...

  5. Xamarin开发笔记—百度在线语音合成

    语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的口语输出的技术. 技术选型:语音合成初步选择有两个,一是讯飞.二是百度. 因为使用的是X ...

  6. 在WIN SERVER 2016上安装DOCKER(带过坑)

    目录 1    概要    1 1.1    主要优势    1 2    在Windows Server上部署Docker    2 概要 博客使用Word发博,发布后,排版会出现很多问题,敬请谅解 ...

  7. Chapter2:Discrete-Time Signal Processing and Short-Time Fourier Analysis

    作者:桂. 时间:2017-05-24  08:44:53 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 这一 ...

  8. SQL储存过程

    基本语法 创建存储过程 create procedure sp_name @[参数名] [类型],@[参数名] [类型] as begin ......... end 以上格式还可以简写成: crea ...

  9. Nmap脚本引擎原理

    Nmap脚本引擎原理 一.NSE介绍 虽然Nmap内嵌的服务于版本探测已足够强大,但是在某些情况下我们需要多伦次的交互才能够探测到服务器的信息,这时候就需要自己编写NSE插件实现这个功能.NSE插件能 ...

  10. 仿淘宝,京东红包雨(基于Phaser框架)

    本红包雨项目是基于HTML5的游戏框架Phaser写的,最终形成的是一个canvas,所以性能很好,但是必须要说的是这个框架比较大,压缩后也有700K左右,所以请慎用. 代码地址: https://g ...