输入月份自动生成excel考勤表,周末高亮,内容可以勾选

输入月份自动生成excel考勤表,周末高亮,内容可以勾选

源码下载地址:地址

  1. 先上图,可以通过输入年、月自动计算指定月份的工作日
    在这里插入图片描述
    2.Excel操作类引用为
using Excel = Microsoft.Office.Interop.Excel;

3.先定义初始的变量,周一至周日,由于不涉及到数据库,所以参与考勤的人员是做到配置文件里面的

#region 定义初始变量public static string[] workDaysArray = { "一", "二", "三", "四", "五", "六", "日" };private static readonly string inWorksUsers = ConfigurationManager.AppSettings["inWorksUser"];
#endregion

3.定义方法计算当月第一天是周一

#region 获取当月一号是周几/// <summary>/// 获取当月一号是周几/// </summary>/// <param name="years"></param>/// <param name="month"></param>/// <returns></returns>public static int GetWeekDayOfMonth(int years, int month){string dateString = years.ToString() + '-' + month.ToString() + '-' + "01";DateTime converDate = Convert.ToDateTime(dateString);int dayOfWeek = (int)DateTime.Parse(dateString).DayOfWeek;return dayOfWeek;}#endregion

4.定义方法计算当月共多少天

 #region 获取当月共多少天/// <summary>/// 获取当月共多少天/// </summary>/// <param name="year"></param>/// <param name="month"></param>/// <returns></returns>public static int GetManyDaysOfMonth(int years, int month){string dateString = years.ToString() + '-' + month.ToString() + '-' + "01";DateTime converDate = Convert.ToDateTime(dateString);int days = DateTime.DaysInMonth(converDate.Year, converDate.Month);return days;}#endregion
  1. 获得当月所有工作日
#region 生成每月工作日/// <summary>/// 生成每月工作日/// </summary>/// <param name="dayOfWeek"></param>/// <returns></returns>public static List<WorkWeekDays> createMonthWorks(int years, int month){List<WorkWeekDays> workDayLists = new List<WorkWeekDays>();//当月一号周几int dayOfWeek = GetWeekDayOfMonth(years, month);if (dayOfWeek == 0)dayOfWeek = 7;dayOfWeek = dayOfWeek - 1;//当月共多少天int manyDays = GetManyDaysOfMonth(years, month);int daysFlag = dayOfWeek;for (int i = 1; i < (manyDays + 1); i++){if (daysFlag >= 7)daysFlag = 0;string weeks = workDaysArray[daysFlag].ToString();int daysOfMonth = GetDaysOfMonth(years.ToString(), month.ToString(), i.ToString());var workDay = new WorkWeekDays{Days = i.ToString(),weekDays = weeks.ToString(),isWorkDay = daysFlag < 5 ? 0 : 1,};daysFlag += 1;workDayLists.Add(workDay);}return workDayLists;}#endregion
  1. 生成Excel并调整样式
 #region 创建Excel文件public static void CreateExcelFile(string FileName, int years, int months){var resultData = createMonthWorks(years, months);object Nothing = System.Reflection.Missing.Value;var app = new Microsoft.Office.Interop.Excel.Application{Visible = false};Workbook workBook = app.Workbooks.Add(Nothing);Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[1];worksheet.Name = "Work";worksheet.Cells[3, 1] = "日期";worksheet.Cells[4, 1] = "姓名";var tagList = new List<string>{"出勤:,√","正休:,●","调休:,〇","请假:,★","迟到:,■"};int tagFlag = 6;var daysCount = resultData.Count;foreach (var item in tagList){tagFlag--;worksheet.Cells[1, 2] = years.ToString();((Range)worksheet.Cells[1, 2]).Interior.ColorIndex = 27;worksheet.Cells[1, 3] = "年";worksheet.Cells[1, 4] = months.ToString();((Range)worksheet.Cells[1, 4]).Interior.ColorIndex = 27;worksheet.Cells[1, 5] = "月";if (tagFlag > 0){string[] tagListArray = item.Split(',');worksheet.Cells[1, (daysCount - tagFlag)] = tagListArray[0].Replace(':',' ') ;worksheet.Cells[2, (daysCount - tagFlag)] = tagListArray[1];}}#region 处理参与考勤的人员int usersFlag = 4;string[] inWorksUserArray = inWorksUsers.Replace(',', ',').Split(',');foreach (var item in inWorksUserArray){usersFlag++;worksheet.Cells[usersFlag, 1] = item;app.ActiveSheet.Rows[usersFlag].RowHeight = 1 / 0.05;}#endregion#region 处理工作日并生成int daysFlag = 1;var flagList = string.Join(",", tagList.ToArray());int inWorksUserArrayLength = inWorksUserArray.Length + 5;foreach (var item in resultData){daysFlag++;worksheet.Cells[3, daysFlag] = item.Days;worksheet.Cells[4, daysFlag] = item.weekDays;if (item.isWorkDay == 1){for (int i = 3; i < inWorksUserArrayLength; i++){((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[i, daysFlag]).Interior.ColorIndex = 27;}}for (int userI = 5; userI < inWorksUserArrayLength; userI++){var cell = (Range)worksheet.Cells[userI, daysFlag];cell.Validation.Delete();cell.Validation.Add(XlDVType.xlValidateList,XlDVAlertStyle.xlValidAlertInformation,XlFormatConditionOperator.xlBetween,flagList,Type.Missing);cell.Validation.IgnoreBlank = true;cell.Validation.InCellDropdown = true;}}#endregion#region 设置全局样式Range r = worksheet.get_Range((Range)worksheet.Cells[1, 1], (Range)worksheet.Cells[inWorksUserArrayLength, (daysCount) + 1]);r.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;r.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;r.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;r.ColumnWidth = 35;r.EntireColumn.AutoFit();app.ActiveSheet.Rows[1].RowHeight = 1 / 0.035;app.ActiveSheet.Rows[2].RowHeight = 1 / 0.035;#endregionworksheet.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);workBook.Close(false, Type.Missing, Type.Missing);app.Quit();}#endregion
  1. 用到的工具实体为
#region 工具实体/// <summary>/// 工作日/// </summary>public class WorkWeekDays{public string Days { get; set; }public string weekDays { get; set; }public int isWorkDay { get; set; }}#endregion

9.控制台调用即可,默认文件生成地址为:当前执行目录

 static void Main(string[] args){try{string year = "";string month = "";Console.WriteLine("请输入年份:");year = Console.ReadLine();Console.WriteLine("请输入月份:");month = Console.ReadLine();Console.WriteLine("正在确认:" + year + "年" + month + "月");Thread.Sleep(200);Console.WriteLine("已确认,正在生成。。");Thread.Sleep(50);Console.WriteLine("已确认,正在生成。。。");Thread.Sleep(50);Console.WriteLine("已确认,正在生成。。。。");string currentPath = Directory.GetCurrentDirectory();string fileName = year + "年" + month + "月"+"考勤表,文件标记为:"+ Guid.NewGuid().ToString().Substring(0,6);string filePath = currentPath + "/" + fileName;ClassLibrary.CoreClass.CreateExcelFile(filePath + ".xls", Convert.ToInt32(year), Convert.ToInt32(month));Console.WriteLine("文件生成成功!");Console.ReadLine();}catch (Exception ex){Console.WriteLine("系统异常!"+ex.Message);Console.ReadLine();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1382352.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

PHP导入Excel考勤表

PHP导入Excel考勤表 安装PHPExcel引入IOFactory.php考勤表如下上传,接收,移动 Excel文件加载文件获取Excel中想要的数据然后把得到的数据放入数据库中进行后续操作; 安装PHPExcel 使用composer安装: composer require phpoffice/phpexcel引入IOFactory.php require_once(ROOT…

navicat卸载干净

1、控制面板卸载 2、删除对应的文件夹 3、删除注册表 全部删除就好了

企业时代下的汽车4S店形势分析

据网上数据显示&#xff0c;2022年约有2000家汽车4S店闭店退网&#xff0c;这一数据不由令人惊叹&#xff01; 疫情放开后&#xff0c;原以为汽车经销商的春天也即将来临&#xff0c;可它们有些已经死在了半路上。 2023年伊始&#xff0c;经销商大戏以一则破产消息开幕——浙…

关于Anaconda卸载干净的问题【已解决】

在卸载anaconda时&#xff0c;为了卸载干净&#xff0c;一般会在win10自带的 应用与功能中选择anaconda 进行卸载。 &#xff0c;也可以用anaconda文件中卸载程序Uninstall-Anaconda3.exe进行卸载。 然后再把相应路径下的剩余文件删掉。 但是&#xff01; 这还不够&#xff0c…

anaconda卸载后重装的悲剧

在经历了无比绝望的一天后&#xff0c;我终于在意志消磨完的最后一刻成功完成了anaconda的卸载重装&#xff0c;这一天过的可以说是非常绝望了。上午还在开开心心的准备下载pytorch库进行学习&#xff0c;结果在更新依赖库的时候没有使用虚拟环境结果导致anaconda崩了&#xff…

Anaconda卸载与安装

因为重新分配磁盘&#xff0c;导致anaconda的各种路径出现了问题&#xff0c;费了九牛二虎之力把所有的路径配置好之后发现jupyter内核竟然不能正常启动…一直没办法正常解决&#xff08;如果有懂的大佬可以评论指导一下&#xff09;&#xff0c;于是最终还是选择卸载重新安装一…

anaconda 完全卸载——重装

由于安装环境的时候不知道什么地方出错了&#xff0c;导致conda下载不了新的包&#xff0c;也不能更新现有的包&#xff0c;所以采取卸载anaconda并重装的方法&#xff08;简答粗暴&#xff09; 卸载 在网上搜集资料&#xff0c;发现卸载anaconda的方法五花八门&#xff0c;而…

Anaconda彻底卸载

Anaconda彻底卸载 Anaconda有时候安装会出现错误&#xff08;用这种方法可以彻底卸载Anaconda&#xff09; 本人亲测有效 在学习Anaconda的过程中 我遇到的问题 下载Anaconda时第一次未安装成功&#xff0c;第二次安装时遇到残留文件 所以做了此教程分享&#xff01; 控制面…

彻底卸载anaconda

彻底卸载anaconda 用anaconda更改我的python版本&#xff0c;就是出现了冻结无法更改等等之类的问题&#xff0c;担心更新anaconda还是会出错&#xff0c;于是打算卸载anaconda&#xff0c;重新下载一个安装。 ①方法一&#xff1a; 可以直接去控制面板—程序—卸载 可能卸载不…

Anaconda的卸载及安装(图文详解)

目录 Anaconda的相关操作 一&#xff1a;Anaconda环境相关操作 1&#xff1a;查看环境 2&#xff1a;创建环境 3&#xff1a;删除环境 4&#xff1a;激活环境 5&#xff1a;退出环境 6&#xff1a;查看当前环境中安装的包 7&#xff1a;删除环境中的已安装的包 8&…

Anaconda完全卸载教程(Windows10系统)

前言&#xff1a;任何软件在卸载的时候&#xff0c;不要直接用目录下自带的uninstall.exe卸载程序&#xff0c;这样子肯定是卸载不干净滴。最近在做项目用到了anaconda环境&#xff0c;做完就卸载anaconda&#xff0c;在网上搜了很多教程以及参考了官方文档&#xff0c;整理了一…

彻底卸载navicat

彻底卸载navicat 下载navicat的时候会有这样的经历。重新安装后上次使用痕迹还会存在。该帖记录一下彻底删除navicat的步骤。 第一步&#xff1a;通过控制台卸载navicat  通过winr&#xff0c;输入control打开控制台。卸载软件。 第二步&#xff1a;删除无用文件。  1. C:\P…

[转载] 怎样彻底卸载anaconda?

彻底卸载anaconda的方法&#xff1a;1、安装Anaconda-Clean package&#xff1b;2、执行【anaconda-clean --yes】命令&#xff1b;3、运行Uninstall-Anaconda3.exe程序即可。 1、安装 Anaconda-Clean package 记得要以管理员身份打开 打开 Anaconda Prompt&#xff0c; 输…

anaconda完全卸载方法

完全卸载步骤 进入命令行模式删除虚拟环境下载anaocnda-clean执行anaconda-clean --yes执行卸载程序删除剩余相关文件删除注册表 由于自己的anaconda版本太老了一直没更新&#xff0c;想更新一下&#xff0c;但未更新成功&#xff0c;于是想要重新卸载安装&#xff0c;本次卸载…

重复delete 对象指针后的 异常调用栈怪异 解析

Release版VC6 MFC程序 程序正常退出时得到一个如下异常调用栈&#xff1a;​ 0:000> kb# ChildEBP RetAddr Args to Child WARNING: Frame IP not in any known module. Following frames may be wrong. 00 0019eb94 76124f2f 00c3afc8 0019ebdc 001…

递归最小二乘法、增广最小二乘法、带遗忘因子的递归增广最小二乘法

一、递归最小二乘法 递推最小二乘法&#xff1a;当矩阵维数增加时&#xff0c;矩阵求逆运算计算量过大&#xff0c;而且不适合在线辨识。为了减少计算量&#xff0c;并且可以实时地辨识出动态系统的特性&#xff0c;可以将最小二乘法转换成参数递推的估计。 取前N组数据&…

ICLR2019 | 模型训练会发生了大量的、反复的样本遗忘现象,如何解决?

每天给你送来NLP技术干货&#xff01; 来自&#xff1a;SimpleAI 标题&#xff1a;An Empirical Study of Example Forgetting during Deep Neural Network Learning会议&#xff1a;ICLR-2019机构&#xff1a;CMU&#xff0c;MSR&#xff0c;MILA 一句话总结&#xff1a;学了忘…

艾宾浩斯遗忘曲线PHP,【干货】~~~艾宾浩斯遗忘曲线~~~

原标题&#xff1a;【干货】~~~艾宾浩斯遗忘曲线~~~ 双11活动你心动了吗&#xff1f;(点击查看 ) 0.6折起&#xff01;11.11狂欢价&#xff01;最高直降4.2k&#xff01; 为什么越到考试&#xff0c;记忆越不给力&#xff1f; 今天复习的内容是教师招聘考试中的高频考点——保持…

灾难性遗忘/增量学习的研究现状

灾难性遗忘/增量学习的研究现状 一. 灾难性遗忘(catastrophic forgetting)为什么会发生&#xff1f;二. 增量学习的概念2.1. 研究领域2.1. 增量学习的上下限 三. 增量学习的方法3.1. 基于正则化的增量学习&#xff08;基于Loss&#xff09; --《Learning without Forgetting》 …

遗忘因子递推最小二乘法估计

%遗忘因子递推最小二乘参数估计&#xff08;FFRLS&#xff09; clear all; close all; a[1 -1.5 0.7]’; b[1 0.5]’; d3; %对象参数 nalength(a)-1; nblength(b)-1; %na、nb为A、B阶次 L1000; %仿真长度 ukzeros(dnb,1); %输入初值&#xff1a;uk(i)表示u(k-i) ykzeros(na,1…