ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: VBA万岁

[分享] VSTO入门常用代码段精选

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-25 12:33 | 显示全部楼层
VBA万岁 发表于 2016-1-22 16:43
3、C#根据日期获取星期方法
代码出处:
http://www.jb51.net/article/74824.htm

3、Excel VBA常用代码VSTO版(C#)

Excel_VBA常用代碼VSTO版.zip (108.45 KB, 下载次数: 164)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-25 16:42 | 显示全部楼层
本帖最后由 VBA万岁 于 2016-1-27 14:19 编辑
VBA万岁 发表于 2016-1-22 16:43
3、C#根据日期获取星期方法
代码出处:
http://www.jb51.net/article/74824.htm


5、c#实现万年历示例分享 万年历农历查询
代码出处:
http://www.jb51.net/article/46233.htm
1)部分(调用)代码如下:
  1. DateTime dt = DateTime.Now;
  2. ChineseCalendar cc = new ChineseCalendar(dt);
  3. Console.WriteLine("阳历:" + cc.DateString);
  4. Console.WriteLine("属相:" + cc.AnimalString);
  5. Console.WriteLine("农历:" + cc.ChineseDateString);
  6. Console.WriteLine("时辰:" + cc.ChineseHour);
  7. Console.WriteLine("节气:" + cc.ChineseTwentyFourDay);
  8. Console.WriteLine("节日:" + cc.DateHoliday);
  9. Console.WriteLine("前一个节气:" + cc.ChineseTwentyFourPrevDay);
  10. Console.WriteLine("后一个节气:" + cc.ChineseTwentyFourNextDay);
  11. Console.WriteLine("干支:" + cc.GanZhiDateString);
  12. Console.WriteLine("星期:" + cc.WeekDayStr);
  13. Console.WriteLine("星宿:" + cc.ChineseConstellation);
  14. Console.WriteLine("星座:" + cc.Constellation);
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-27 14:23 | 显示全部楼层
本帖最后由 VBA万岁 于 2016-1-27 14:35 编辑
VBA万岁 发表于 2016-1-27 14:18
2)关于闰年的代码:
a、c#简单判断是否是闰年的方法代码
2)关于闰年的代码:
a) c#简单判断是否是闰年的方法代码
  1. public static bool IsLeapYear(int a_year)
  2. {
  3. String s;
  4. DateTime dt;
  5. try
  6. {
  7. s = (a_year.ToString() + "-02-29");
  8. dt = Convert.ToDateTime(s);
  9. return true;
  10. }
  11. catch
  12. {
  13. return false;
  14. }
  15. }
复制代码

b) C#判断指定年份是否为闰年的方法
  1. public bool IsLeapYear(int year)
  2. {
  3. if ((year < 1) || (year > 9999))
  4. {
  5. throw new ArgumentOutOfRangeException("year", "年份必须是从1至9999之间数字.");
  6. }
  7. if ((year % 4) != 0)
  8. {
  9. return false;
  10. }
  11. if ((year % 100) == 0)
  12. {
  13. return ((year % 400) == 0);
  14. }
  15. return true;
  16. }
复制代码


顺便附上关于闰年的有关知识如下:
地球绕太阳转一周的实际时间是365天5时48分46秒。如果一年只有365天,那么每年就多出5个小时。4年多出的23小时15分4秒,差不多就等于1天。于是决定每四年增加1天。但是,它比一天24小时又少了约45分钟,如果每100年有25个闰年的话,就少了18时43分20秒,这就差不多等于1天了,这显然不合适。可以算出,每年多出5小时48分46秒,100年就多出581小时16分40秒。而25个闰年需要25*24=600小时。581小时16分40秒只够24个闰年(24*24=576小时),于是决定每100年只安排24个闰年(世纪年不作闰年)。但是这样每100年又多出了5小时16分40秒(581小时16分40秒-576小时),于是又决定每400年增加一个闰年。这样就比较接近实际情况了。根据以上的,决定闰年按照以下的计算规则:闰年应能被4整除(如2004年是闰年,而2001...
出处:
闰年怎么算?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-27 15:27 | 显示全部楼层
VBA万岁 发表于 2016-1-25 16:42
5、c#实现万年历示例分享 万年历农历查询
代码出处:
http://www.jb51.net/article/46233.htm

继续补充闰年的知识:

什么叫闰年!怎么计算闰年是怎么来的

1、闰年的含义  闰年(leap year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。
  闰年共有366天(31,29,31,30,31,30,31,31,30,31,30,31)。、闰年的判定方法  判定公历闰年遵循的一般规律为: 四年一闰,百年不闰,四百年再闰.
  公历闰年的精确计算方法:(按一回归年365天5小时48分45.5秒)
  ①、普通年能被4整除的为闰年。(如2004年就是闰年,1901年不是闰年) 
  ②、世纪年能被400整除而不能被3200整除的为闰年。(如2000年是闰年,3200年不是闰年)
  ③、对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年.(如172800年是闰年,86400年不是闰年)
  又若按照 :(按一回归年365天5小时48分46秒)闰年规则如下:
  ①、普通年能被4整除而不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年) 
  ②、世纪年能被400整除而不能被3200整除的为闰年。(如2000年是闰年,3200年不是闰年)
  ③、对于数值很大的年份能整除3200,但同时又能整除86400则又是闰年.(如86400年是闰年)
  原因:一年按365天5h48'46''计算,一年日数必须是整数,不便将零时数计入,所以取365天为一年,则余5时48分46秒 ,积至4年约满一 日,所以4年一“闰日”,谓之“闰年”,无“闰日”之年为平年,即平年365天,闰年366天。但到4年之时,仅有23时15分4秒闰一日,欠缺44分56秒;积至100年(25闰)时就欠缺18时43分20秒,约合3 / 4日,所以满100年不闰;此时又余5时16分40秒,积至400年余21时6分40秒又闰;又欠缺2时53分20秒,积至3200年计欠缺23时6分40秒,所以满3200年不闰;此时又余53分20秒,积至86400年刚好24 时又一闰,这是不余不欠,需重计算,所以按阳历计算就有上面的闰年规则。
  按一回归年365天5h48'45.5''计算:3200年多出16000小时153600分145600秒 =18600小时26分40秒,共32*24+8=136个闰年=776*24=18624小时 >18600小时,所以只能算到775个闰年,3200不是闰年,于是775*24=18600,多出了26分40秒怎么办需要多少个周期弥补?答案是54个周期,为172800年,因为172800/3200=54个周期 54*26分40秒=1404分2160秒=24小时。
  公元前闰年规则如下:
  1,非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
  2,整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年。
  【128年31闰置闰法】
  这一规则曾在19世纪提出,但不知何故没被两教派采纳。比起400年3不闰和900年7不闰的规则,128年31闰更精确更简便。
  按现行的闰年规则,从2052年到2096年间的闰年与回归年的误差都会超过一天以上,如采用128年31闰规则不会这么早出现这种情况。
  128年31闰的置闰方案的优点和实施方法:
  1,采用128年31闰的置闰的方法,可以大大地减少历年与回归年的误差,回归年长度是365.24219879日,128年31闰的平均年长是365.2421875日。历年与回归年的平均误差每年不到一秒,是现在历法与回归年平均误差的27分之一。
  2.改历后与现历法衔接好,不须要过渡阶段。其方法如下:现历法继续使用,到2048年停闰,以后每加128年既不闰。新历法规则是:每四年一闰,凡公元年数能被128整除的年不闰。
  3. 此历法非常科学,它的置闰方法现历法更简单,更符合天体运行规律,现历法平均每年与回归年误差26秒,而此历法每年与回归年平均误差不到一秒。经计算,如果回归年按现在长度计算,得八万多年,新历法与回归年的误差才能超过一日。而现历法与回归年的误差3300年即超过一日。此历法好记简单,便于历算,凡公元年数能被128整除的年不闰。

闰年计算方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-29 21:04 | 显示全部楼层
VBA万岁 发表于 2016-1-25 16:42
5、c#实现万年历示例分享 万年历农历查询
代码出处:
http://www.jb51.net/article/46233.htm

测试成功,效果截图:



3.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-29 21:06 | 显示全部楼层
VBA万岁 发表于 2016-1-25 16:42
5、c#实现万年历示例分享 万年历农历查询
代码出处:
http://www.jb51.net/article/46233.htm

测试(调用)代码:
  1. private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
  2.         {
  3.             //textBox1.Text = monthCalendar1.SelectionStart.ToShortDateString();
  4.             //DateTime dt = DateTime.Now;
  5.             DateTime dt = monthCalendar1.SelectionStart;
  6.             string t = "";
  7.             ChineseCalendar cc = new ChineseCalendar(dt);
  8.             t = "阳历:" + cc.DateString + "\r\n属相:" + cc.AnimalString + "\r\n农历:" + cc.ChineseDateString;
  9.             t = t + "\r\n时辰:" + cc.ChineseHour + "\r\n节气:" + cc.ChineseTwentyFourDay + "\r\n节日:" + cc.DateHoliday;
  10.             t = t + "\r\n前一个节气:" + cc.ChineseTwentyFourPrevDay + "\r\n后一个节气:" + cc.ChineseTwentyFourNextDay;
  11.             t = t + "\r\n干支:" + cc.GanZhiDateString + "\r\n星期:" + cc.WeekDayStr;
  12.             t = t + "\r\n星宿:" + cc.ChineseConstellation + "\r\n星座:" + cc.Constellation;
  13.             textBox1.Text = t;
  14.         }
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-29 21:08 | 显示全部楼层
VBA万岁 发表于 2016-1-29 21:06
测试(调用)代码:

测试制作源码:
ExcelHelpTaskPane.rar (782.5 KB, 下载次数: 66)

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-30 07:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VBA万岁 发表于 2016-1-27 14:23
2)关于闰年的代码:
a) c#简单判断是否是闰年的方法代码

测试成功,效果图如下:

4.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-30 08:06 | 显示全部楼层

奇怪,做完此项目后,再打开任一Excel文件,会依次弹出如下出错提示,不知为何:

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-30 08:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

奇怪,做完此项目后,再打开任一Excel文件,会依次弹出如下出错提示,不知为何:
5.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 15:44 , Processed in 0.026711 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表