关于Excel Networkdays方法的实现

    最近一个程序要求excel输出的日期差为Networkdays. 在网上找了下,没有找到很好的具体实现方法。

要说明的是,微软的Microsoft.Office.Interop.Excel已经实现的Networkdays的方法,不过前提是你要实例化一个ApplicationClass, 

Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();

var diff = app.WorksheetFunction.NetworkDays(startDate, endDate, Type.Missing);

  

这样做的结果是需要一个excel进程在后台运行,如果在导出excel时可以直接用,但是在查询页面里用,我觉得太占用资源了。

我想自写一个方法来实现它,networkdays的第三个参数是加入了假日的,这个不需要,因时间问题暂时先不实现,具体代码如下:

        public static int Networkdays(DateTime startDate, DateTime endDate, params DateTime[] parm)
        {
            int rd = (int)(endDate - startDate).TotalDays;
            if (IsWeekend(endDate) && IsWeekend(startDate) && Math.Abs(rd) < 2)
                return 0;
            if (rd == 0)
                return 1;
            int r = 0;
            DateTime dtTemp = startDate;
            if (rd >= 0)
            {
                for (int i = 0; i <= rd; i++)
                {
                    r++;
                    dtTemp = dtTemp.AddDays(i);
                    if (IsWeekend(dtTemp))
                    {
                        r--;
                    }
                    dtTemp = startDate;
                }
                return r;
            }
            else
            {
                for (int i = 0; i >= rd; i--)
                {
                    r--;
                    dtTemp = dtTemp.AddDays(i);
                    if (IsWeekend(dtTemp))
                    {
                        r++;
                    }
                    dtTemp = startDate;
                }
                return r;
            }
        }
        protected static bool IsWeekend(DateTime dt)
        {
            int r = (int)dt.DayOfWeek;
            if (r == 0 || r == 6)
            {
                return true;
            }
            else
                return false;
        }

    }

 

posted @ 2015-11-23 18:11  89钟声  阅读(632)  评论(0编辑  收藏  举报