起源
我哥在家乡的一家电影放映场工作,由于不太先进的设备,导致每一次打印机打出都号码都与座位号对应不上,所以就跟我聊,问能不能写一个方便一点的小系统。
抽象设计
- 选择编程语言
这个小代码的难点是如何操作(WORD文本)以及如何方便安装使用,至于性能,可能不需要考虑的太多。由于之前写了两个JAVA与PHP的WEB网站,就想用WEB网站的形式。但是由于需要稳定服务器就被迫放弃了,因为没有必要。
简单调研了一下,决定用C#编写一个单机版的客户端小程序。一是因为简单,二是因为c#对word的操作应该更好支持。 - 是否选择数据库
如上面所言,使用数据库还要安装,使用线上资源没必要,而且就算使用本地数据,由于操作可能需要一定的技术功底,所以也暂时放弃。
-程序设想
一个单机版的可以通过word模板去生成对应的电影票信息的word文本的软件。
捕获1.PNG 并且要在每一步对应打上log,方便纠错与统计。
难点解析
c#直接使用net框架很方面的完成图形界面的编写以及按钮的颜色改变,按钮信息获取等,这些就不再阐述了,接下来我主要写一下关于如何使用c#操作word以及如何编写一个简单的日志类。 界面.PNG已售出自动修改为红色且不再可选,点击座位号,确认可以生成对应word.
-
操作word模板
c#操作word的两种方式:
1. 使用office.Core.dll 引用 office.PNG 直接添加引用,搜索office就可以,它使用的是你电脑office上的dll引用,不过感觉上使用起来比较复杂。推荐第二种。
2. 使用Aspose.WORD for net 进行操作
Aspose 官网下载 此处需要google CSDN下载(破解版)
操作WORD:
使用上面两种方式操作一个word文件都是很麻烦的,因为word和txt不同,它有很多编码,字号缩进等设置,要找到编辑的地方很麻烦。在查了一些资料以后,发现微软word有一个很好的功能书签,它可以理解为一个key,对应的value即为所需要编辑的word的地址位置。查看详细 书签.PNG- office 操作代码
//赋值书签名
oBookMark[0] = "movieName";
oBookMark[1] = "pai";
oBookMark[2] = "pai1";
oBookMark[3] = "hao";
oBookMark[4] = "hao1";
doc = wordApp.Documents.Open("D://test//test.doc");
//插入对应书签 对应值
doc.Bookmarks.get_Item(ref oBookMark[0]).Range.Text = movieName;
doc.Bookmarks.get_Item(ref oBookMark[1]).Range.Text = pai;
doc.Bookmarks.get_Item(ref oBookMark[2]).Range.Text = pai;
doc.Bookmarks.get_Item(ref oBookMark[3]).Range.Text = hao;
doc.Bookmarks.get_Item(ref oBookMark[4]).Range.Text = hao;
//另存为 savePath 路径
doc.SaveAs2(savePath);
TraceHelper.GetInstance().Info("已保存至" + savePath, "WordRW Function");
doc.Close(ref unknow, ref unknow, ref unknow);
wordApp.Documents.Save(ref unknow, ref unknow);
wordApp.Quit(ref unknow, ref unknow, ref unknow);
2.Aspose 操作代码
//初始化信息
doc = new Aspose.Words.Document("test.doc");
DocumentBuilder bulider = new DocumentBuilder(doc);
//移动并写对应信息
bulider.MoveToBookmark(oBookMark[0]);
bulider.Write(movieName);
bulider.MoveToBookmark(oBookMark[1]);
bulider.Write(pai);
bulider.MoveToBookmark(oBookMark[2]);
bulider.Write(pai);
bulider.MoveToBookmark(oBookMark[3]);
bulider.Write(hao);
bulider.MoveToBookmark(oBookMark[4]);
bulider.Write(hao);
//doc 另存
doc.Save(savePath);
TraceHelper.GetInstance().Info("已保存至" + savePath, "WordRW Function");
上述两种方式都可以做到我们想要的功能。
text.PNG
-
日志类
为了更好的调试代码,也为了保存一些有用的信息,所有日志是必不可少的。 已调研日志引用(EventLog Log4Net)但他们用起来都比较麻烦,因为他们都是为大型系统设计的,所以就用网上例子自己写了一个简单日志类(利用DEBUG)。
TraceHelper.GetInstance().Info("程序开始...", "Main Function");
log.PNG
网友评论