最近想统计自己的工时,于是按条目记录每天,每项工作的分类和时间,最后再统计到一起。
按目前流行的做法,应该是弄个APP输入数据,然后服务器做大数据分析。不过我就一个人,工作思路还有可能变,老板还有可能经常提要求,还是做个柔性一点的吧。
最后方法是Excel+VSTO(C#),其实纯C#我更熟,Excel+VBA更亲民,不过从开发的目的来讲,就是为了自己方便的玩意,输入数据还要开VS,或者在Excel带的IDE里敲vba还是太自虐了。
数据页很简单,日期,地点,起始时间,终止时间,包含的旅途时间,具体的分类等,在Excel里面每天输入少则再三项,多则十来项,还算方便。
2018/10/8 |
Beijing |
7:30 |
12:00 |
2.5 |
3.2 |
|
|
|
模具自动化 |
然后就是VSTO部分。
主要几个功能:在Ribbon添加一个按钮。参考
https://docs.microsoft.com/en-us/visualstudio/vsto/ribbon-overview?view=vs-2017
通常自定义Ribbon都是Plug-in级别的,针对某个文档操作的话,开始没有成功,后来注意到有个叫OfficeId的属性,是自定义Ribbon所在的标签从属,修改成TabHome就显示,怀疑是我没有管理员权限的问题。
在Ribbon里添加了一个按钮,后来想想其实自定义一个Panel更简单。点击按钮,会遍历所有项目,并建立一个数据表。
然后在新的标签页里将数据表按照自己的需求,筛选汇总。
节选一部分代码吧。
private void FillSummarySheet()
{
var worksheet = Globals.Sheet10; //汇总页
worksheet.WorkingHourArea.ClearContents(); //提前定义好的数据区域 NamedRange
int start_index = 1;
//Workinghour table
worksheet.Cells[start_index, 1].Value = "The Working hours";
worksheet.Cells[start_index + 1, 1].Value = "Date";
worksheet.Cells[start_index + 1, 2].Value = "BU Sulution";
worksheet.Cells[start_index + 1, 3].Value = "NEV";
worksheet.Cells[start_index + 1, 4].Value = "Bridge CMM";
worksheet.Cells[start_index + 1, 5].Value = "Software";
worksheet.Cells[start_index + 1, 6].Value = "Digital";
worksheet.Cells[start_index + 1, 7].Value = "new PSE";
worksheet.Cells[start_index + 1, 8].Value = "Admin";
//我自己工作的分类项目
for(int i=1;i<=12;i++)
{
int current_month = (10 + i - 1) % 12;
if (current_month == 0)
current_month = 12;
string month_str = (new DateTime(2018, current_month, 1)).ToString("MMM");
//土办法,遍历月份,应该有更好办法吧
worksheet.Cells[start_index + 1 + i, 1].Value = month_str;
for(int j=1;j<=7;j++)
{
worksheet.Cells[start_index + 1 + i, 1+j].Value = Datas.Where(n => n.Type.StartsWith(j.ToString())).Where(n => n.Date.Month == current_month).Sum(n => n.WorkingTime);
//筛选——某种分类下(例如3 & 3.1 & 3.2)对应月份的工时求和
}
}
}
后面就简单了,有什么新的需求就添加几行,然后在表里面直接用Excel的功能做图表。
这么玩不太好复现,更“合理”的办法应该是分成三部分:
- 一个Excel文件专门用来做数据输入
- 用C#或者另外一个Excel表(vba或者透视表)来处理数据
- 最后的Excel文件将数据生成图表
不过我个人的目的就是试试VSTO,然后尽快用起来,这个月的报告有漂亮的图表用了,笔芯。