工作是枯燥的,重复性的工作,更是枯燥中的枯燥;不幸的是,最近有个非常枯燥而又繁重的任务,让我老眼昏花心跳加速,感叹时光补与,其实任务很简单,就是统计客户订单后,需要把订单的属性保存到excel上传存档……
在一遍又一遍地打开excel以后,我发现这些订单有一个特点:订单号是递增的,而属性,绝大部分是重复的,于是我的偷懒天赋躁动不安起来,我不禁思考:能不能让电脑自动化操作,帮我分担一些任务呢?
说到自动化脚本,最早我是想用python的,但pyQt操作excel的库不太方便,我甚至异想天开地想用win API……
不过,等等!
既然说到win,为什么不用微软全家桶呢?
通过百度大法,我知道了C#+VS+winform这样糖分巨高的组合,而对于excel的脚本,微软贴心地准备好了各种api接口给你调用,这……比python的excel库不知高到哪里去了。(虽然用起来稍微麻烦一点)
接下来花了一天时间简单浏览了一下c#的官方教程,然后又扫了一眼excel的库,不得不说,MSDN太贴心了。
好了,预热结束,准备开搞,不过,在开搞之前,我得先准备点东西:
1,下载并安装VS2019 community,全程next无压力,就是……安装包有点大。好在我的百兆水管还能凑活;
2,将浏览器搜索工具由百度切换为bing,既然是面向搜索引擎编程,那就得换个好的工具不是(主要是bing对msdn特别友好,官方文档一搜就有)
做完这些准备工作之后,那就开始编(ctrl + C)程(ctrl + V)吧!
工具由三个主要部分组成:
- 录入界面
- excel操作
- 截图保存
1,录入界面
这部分主要是考虑工具的可视化,用界面把重复信息录入,方便后续批量操作。
至于界面,当然用winform了,如果不需要用界面,跳过此步骤即可。
1.1创建窗体应用程序

1.2拖控件


1.3写代码
直接在控件上双击,就能写相应的代码了,比如,我这个需要录入单号、厂家、客户信息,然后自动赋值给我的excel操作类,那么可以直接 在文本框双击,写下以下代码:
private void textBox_OC_TextChanged(object sender, EventArgs e)
{
newReport.orderingCode = this.textBox_OC.Text;
}
我需要实现点击Generate即自动生成报告,那么双击Generate控件,直接写代码:
private void button_Generate_Click(object sender, EventArgs e)
{
Task task = new Task(SaveFile);
task.Start();
}
具体的操作后面再细讲。
2,excel操作
微软针对office互操作提供了API,官方文档如下,我只需要操作excel即可。
https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel?view=excel-piadocs.microsoft.com2.1 interop.excel介绍
excel的API操作逻辑是这样的:excel应用->workbook->worksheet->cell
第一步:创建一个excel应用:
excelApp = new Microsoft.Office.Interop.Excel.Application();
excelApp.Visible = false;//这里将excel设为不可见,如果你想看到excel自动操作的界面,那么可以设为true
第二步:创建workbook和worksheet
Workbook wkb = excelApp.Workbooks.Add();//新建
//Workbook wkb = excelApp.Workbooks.Open(filename);//打开一个现有文件,文件名为filename;
Worksheet wks = wkb.Worksheets["Sheet1"];
需要注意的是,如果本机没有安装office,是不能打开现有excel文件的,只能创建(为啥提这个,因为我电脑上只装了WPS)。
第三步:操作单元格: