帮公司人事MM做了个工资条拆分工具

引言

偶尔一次午饭时人事说加班加到8点多,纯手工复制粘贴Excel的内容,公司大概150多人吧,每次发工资时都需要这样手动处理,将一个Excel拆分成150多个Excel,再把里面的内容粘过去,如此循环。于是,我写了个小程序帮人事MM解决。

解决方法

主要是用到了NPOI生成Excel,根据每条记录创建一个Excel,并读取员工姓名作为文件名,并设置Excel为只读。

界面预览

导入和拆分在状态栏都会有相应提示

代码

 /// <summary>
        /// 读取excel
        /// </summary>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public DataSet ToDataTable(string filePath,string fileName)
        {
            string connStr = "";

            string fileType = System.IO.Path.GetExtension(fileName);

            if (string.IsNullOrEmpty(fileType)) return null;

            if (fileType == ".xls")
            {
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
            }
            else
            {
                connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
            }
            string sql_F = "Select * FROM [{0}]";

            OleDbConnection conn = null;

            OleDbDataAdapter da = null;

            DataTable dtSheetName = null;

            DataSet ds = new DataSet();

            try
            {

                // 初始化连接,并打开

                conn = new OleDbConnection(connStr);

                conn.Open();

                // 获取数据源的表定义元数据                        

                string SheetName = "";

                dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

                // 初始化适配器

                da = new OleDbDataAdapter();

                for (int i = 0; i < dtSheetName.Rows.Count; i++)
                {

                    SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];

                    if (SheetName.Contains("$") && !SheetName.Replace("‘", "").EndsWith("$"))
                    {
                        continue;
                    }

                    da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName), conn);

                    DataSet dsItem = new DataSet();

                    da.Fill(dsItem, "MyTable");
                    ds.Tables.Add(dsItem.Tables[0].Copy());

                }

            }

            catch (Exception ex)
            {

            }
            finally
            {
                // 关闭连接
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                    da.Dispose();
                    conn.Dispose();
                }

            }

            return ds;
        }

        public void ExcelSplit(DataTable excelTable)
        {
            //创建工作表
            HSSFWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet1");
            sheet.ProtectSheet("123"); //加密Excel,从而实现只读
            //创建表头
            IRow headerrow = sheet.CreateRow(0);
            for (int i = 0; i < excelTable.Columns.Count; i++)
            {
                headerrow.CreateCell(i).SetCellValue(excelTable.Columns[i].ColumnName);
            }

            int index = 0; //拆分个数
            //创建内容
            IRow datarow = sheet.CreateRow(1);
            FileStream stream = null;
            if (!Directory.Exists(@"d:/MyXls"))
            {
                Directory.CreateDirectory(@"d:/MyXls");
            }

            for (int i = 0; i < excelTable.Rows.Count; i++)
            {
                for (int j = 0; j < excelTable.Columns.Count; j++)
                {
                    ICell cell = datarow.CreateCell(j);
                    cell.SetCellValue(excelTable.Rows[i][j].ToString());
                }
                string excelname = excelTable.Rows[i]["姓名"].ToString()+"_"+DateTime.Now.ToString("yyyy-MM")+ ".xls";
                stream = new FileStream(@"d:/MyXls/" + excelname, FileMode.Create);
                workbook.Write(stream);

                index++;
            }
            stream.Close();

            this.toolStripStatusLabel1.Text = "共拆分工资条:" + index + "条";
            this.Cursor = Cursors.Default;
        }

帮公司人事MM做了个工资条拆分工具

时间: 2024-10-14 16:57:48

帮公司人事MM做了个工资条拆分工具的相关文章

公司网站怎么做 ?

公司网站怎么做? 1.是自己建站.你自己有建站技术人员,可以借助开源程序自己开发网站,自己设计网页编程也好,套已有的源码模板也好,修改别人的模板也好,仿制别人的网站也好,都可以自主自由的去弄了,想咋弄咋弄这是最痛快的了,但这个时间成本是需要考虑进去的.另外强烈建议不要自己去开发什么后台CMS程序,你不一定专业你也不是网络公司不是建站公司,没有必要浪费时间到这些事情上. 2.现在比较流行的自主建站平台.不得不说这是建站行业的一次革命,一是把建站的时间成本缩短到了几分钟,夸张点说秒建站也不为过了.二

七種公司永遠做不大,十種老板永遠成不了功!值得借鑒!

1.格局小的企業 1999年2月,牛根生對孫先紅說:我給 你100萬的宣傳費,對誰也不要說.先紅問:為什麼不能說?牛說:現在總共籌到300萬,拿出100萬做廣告,我怕大家知道後接受不了.我就要一個效果: 一夜之間,讓呼市人都知道.於是1999年4月1日早上,一覺醒來,人們突然發現道路兩旁冒出了一溜溜的紅色路牌廣告,上面高書金色大字:蒙牛乳業,創內 蒙古乳業第二品牌! 但在現實中,許多老板肩上扛著品牌大旗心裏打著小算盤,樂於小打小鬧,希望以小的投入來獲得大的回報,從沒想過以大的 投入來換取更大的回

记录一次帮策划写的基于VBA的数据转化工具

由于策划计算的表格结构和程序实际使用的数据表结构不一定一致,因此有时候经常需要做数据转化.把策划自己的表格转成程序需要的格式,然后再导入数据库.这次也是策划有个表,里面有多个字段分别表示多个属性,但是程序考虑到通用,不想一个属性增加一个字段,因此想用一个字段,然后采用JSON格式来表示所有属性. 因此,帮策划写了个VBA实现多个字段合并成JSON的.这个VBA可以通过Ctrl表格来配置: 源表名:策划表的名字 目标表名:程序表的名字 字段映射:程序表的字段名对应策划表的字段名.目前支持字段合并(

公司网站怎么做?

1.是自己建站.你自己有建站技术人员,可以借助开源程序自己开发网站,自己设计网页编程也好,套已有的源码模板也好,修改别人的模板也好,仿制别人的网站也好,都可以自主自由的去弄了,想咋弄咋弄这是最痛快的了,但这个时间成本是需要考虑进去的.另外强烈建议不要自己去开发什么后台CMS程序,你不一定专业你也不是网络公司不是建站公司,没有必要浪费时间到这些事情上. 2.现在比较流行的自主建站平台.不得不说这是建站行业的一次革命,一是把建站的时间成本缩短到了几分钟,夸张点说秒建站也不为过了.二是费用也降低到了几

公司有必要做企业网站建设吗

现在一些企业都在建设自己的网站,而且是精益求精,越来越重视.那么企业网站建设有什么作用呢?下面亿丰科技就详细介绍企业网站的作用. 一.可以全面详细地介绍公司及展示公司产品 公司网站的一个最基本的功能,就是能够全面.详细地介绍公司及公司产品.公司服务.事实上,公司可以把任何想让人们知道的东西放入网站,如公司简介.公司业绩.产品的外观.功能及其使用方法等,都可以展示于企业网站上. 二.有利于提升企业品牌形象 一般来说,企业建立自己的网站,不但可以给企业带来新客户.新生意,也可以大幅度提升企业业绩.企

移动web 1像素边框 瞧瞧大公司是怎么做的

前言 移动端web项目越来越多,要求也越来越高,好多设计师都发现了,你们前端实现的边线为什么是糊的,根本不是1像素,好吧,我只能找参考,要么征服设计,要么征服自己. 关于为什么设置的是1px,而显示出来却不是呢,这里我就不多做介绍了:放出几个链接, 设备像素比devicePixelRatio简单介绍,还有 移动端高清.多屏适配方案 以及 iPhone 6 屏幕揭秘,相信大家看完这几个自己也就能想出解决的办法了. 哪些项目实现了 一般遇到问题,都是找一下成熟项目他们公司的代码看看,自己也翻看了好多

2016创业五大风向标:看十大硅谷前沿公司都在做什么?

运行在美国硅谷大型超市里的服务机器人OSHbot NASA宇航员Yvonne Cagle在近期谷歌和硅谷创投平台F50举办的Founder World 2015上说:"探索火星固然是人类史上的重要一步,而我们也该将目光转向地球,硅谷现在所发生的一切,让我相信人类的那一大步飞跃其实近在咫尺." 作为全球的科技与创新之都,硅谷不仅有NASA和奇点大学这样遥远未来技术的"导航器",也有斯坦福和沙石路(Sand Hill Road)风投一条街这样着眼于推动近期未来技术商用化

Unit 03 介绍公司人事规章

单词 wage                薪酬 employee            员工 welfare             福利 concentrate         集中 enjoy               享受 salary              工资 fee                 费用 divorce             离婚 ensure              确保 return              归还 percent          

大公司或专业团队目前流行的前端工具有什么?

寸志,前端工程师 黄保长.王楠.Bear Little 等人赞同 下面这些东西在大公司可能不流行(你懂的,大公司喜欢自己造轮子),但绝对是专业前端需要了解的: Node.js:现代工业化前端的基础: RequireJS:AMD规范,即将过时的 JavaScript 模块化方案: Bower:前端模块源: npm:前端工具源,另一个潜在的前端模块源: Browserify:即将过时的基于 CommonJS 的前端模块化方案: Less:等 CSS 增强工具: Gulp:前端构建工具,如果你在前端开