输入月份自动生成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();}}

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

  1. 利用poi生成excel考勤表

    今天利用了Apache poi 编写了一个生成excel的考勤表,Apache poi链接地址为http://poi.apache.org/,代码如下: package com.pom;import ...

  2. VBA自动生成excel的表单及链接的方法

    自动生成表单 Sub generateMenu()Dim stCol As Integer, stRow As IntegermenuName = InputBox("MenuSheetNa ...

  3. 简单的excel考勤表

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 制作简单的excel考勤表TOC 前言 提示:这里可以添加本文要记录的大概内容: 制作一张表格用于考勤,选定好年份和指定的月份后,结果 ...

  4. python自动汇总表格_用Python自动生成Excel报表

    作者 / 来源:林骥(ID:linjiwx) 01 安装和导入模块 以 Python 中的 openpyxl 模块为例,它能够读取和修改 Excel 文件,如果你还没有安装,可以通过以下命令进行安装: ...

  5. 用Python自动生成Excel报表

    在日常工作中,可能会有一些重复无聊的任务,比如说,从 Excel 或数据库中收集一些数据,设置相应的数据格式并做成报表. 类似这种重复无聊的任务,我们完全可以交给 Python 去自动完成,只要第一次 ...

  6. 基于Visual C++2010 与office2010开发办公自动化(2)-自动生成excel与word并打开

    VS2010是新一代全新开发工具 属于全新的系统构架 VS2010旗舰版功能全景 Office 2010,是微软推出新一代办公软件,开发代号为Office 14,实际是第12个发行版.该软件共有6个版 ...

  7. 基于Visual C++2010 与office2010开发办公自动化 2 -自动生成excel与word并打开

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! VS20 ...

  8. 蓝牙驱动卸载后自动安装_最热建筑安装工程计算表格,输入后自动生成,省时方便易上手...

    最热建筑安装工程计算表格,输入后自动生成,省时方便易上手! 工程量计算是每一个造价从业者必备技能.但是要保证计算过程中不能有一丝丝差错,实在是一件令人头疼的事情,因为步骤比较繁杂,并且算量大,一不小心 ...

  9. 网页自动加拼音html,javascript实现输入中文自动生成拼音

    需求:输入中文,输入框失去焦点后自动生成全写拼音及简写拼音. 分享一款轻量级JS插件:Convert_Pinyin.js(文末可以下载). 只需引入一个JS文件,然后调用对象里在JS方法函数即可,演示 ...

  10. 输入关键词自动生成文章-免费自动输入关键词自动生成文章器

    输入关键词自动生成文章,什么是输入关键词自动生成文章?例:你输入什么关键词 '装修'免费工具会自动生成一篇跟装修相关的文章,该免费工具还支持:自动关键词文章生成+文章自动采集+伪原创+自动发布+自动推 ...

最新文章

  1. FineReport中如何自定义登录界面
  2. MS SQL “ 无法启动分布式事务“问题的解决思路
  3. Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AV
  4. python爬取地理数据_python爬取所有人位置信息——腾讯位置大数据
  5. 国考临近——送给奔跑在国考路上的人的一些话
  6. mysql主从配置原理_MySQL主从复制原理
  7. 玩转oracle 11g(43):oracle导出空表
  8. Java易混小知识——equals方法和==的区别
  9. swift for循环_Swift | 实战一个简单的素数计算器demo
  10. Serverless实战 —— ​​​​​​​Laravel + Serverless Framework 快速创建 CMS 内容管理系统
  11. Halcon的应用程序 打开后 弹出没有帮助文件错误提示
  12. 绘制多个折线图_精品图表 | Excel绘制面板折线图
  13. OpenCL编程基本流程及完整示例
  14. 【优化分类】基于matlab遗传算法优化支持向量机分类(多输入多分类)【含Matlab源码 QF003期】
  15. uniapp本地开发小程序代码超过2M,不能预览和真机调试解决办法
  16. SQL语法提示工具SQL Prompt 发布v10.6
  17. Java base64位文件互转
  18. 快速排序时间复杂度分析推导
  19. 阿里云上线视频云剪辑 快速产出PGC短视频不再是问题!
  20. 好想学python猜谜_有人可以教我猜字谜吗 好想学 怎样才可以学好猜字谜呢

热门文章

  1. iphone android 功能清单,iPhone的这几个App,让你的工作效率翻倍(1)
  2. resnet网络结构图
  3. oracle pmon andsmon,SMON and PMON
  4. centos光盘修复引导_CentOS7修复安装
  5. 最大子段和问题【思路及实现】
  6. 怎么清理服务器数据库日志文件,SQL SERVER 数据库日志清理图文教程
  7. java 创建txt_java创建txt文件并存入内容
  8. 方正文祥E520硬盘保护卡还原卡软件使用要点讲解
  9. 基于51单片机的直流电机正反转及控速+proteus仿真图
  10. 南京邮电大学网络信息安全——软件漏洞分析与防范(实验一——栈溢出和gs保护机制)