基于C#的对DOC文件修改的小系统

起源

我哥在家乡的一家电影放映场工作,由于不太先进的设备,导致每一次打印机打出都号码都与座位号对应不上,所以就跟我聊,问能不能写一个方便一点的小系统。

抽象设计

  • 选择编程语言
    这个小代码的难点是如何操作(WORD文本)以及如何方便安装使用,至于性能,可能不需要考虑的太多。由于之前写了两个JAVA与PHP的WEB网站,就想用WEB网站的形式。但是由于需要稳定服务器就被迫放弃了,因为没有必要。
    简单调研了一下,决定用C#编写一个单机版的客户端小程序。一是因为简单,二是因为c#对word的操作应该更好支持。
  • 是否选择数据库
    如上面所言,使用数据库还要安装,使用线上资源没必要,而且就算使用本地数据,由于操作可能需要一定的技术功底,所以也暂时放弃。
    -程序设想
    一个单机版的可以通过word模板去生成对应的电影票信息的word文本的软件。
    8387666-92ba2a428d8aaddc.PNG
    捕获1.PNG
    并且要在每一步对应打上log,方便纠错与统计。

难点解析

c#直接使用net框架很方面的完成图形界面的编写以及按钮的颜色改变,按钮信息获取等,这些就不再阐述了,接下来我主要写一下关于如何使用c#操作word以及如何编写一个简单的日志类。
8387666-9c08483abec2c73a.PNG
界面.PNG

已售出自动修改为红色且不再可选,点击座位号,确认可以生成对应word.

  • 操作word模板
    c#操作word的两种方式:
    1. 使用office.Core.dll 引用
    8387666-5bdc76320c8ca9eb.PNG
    office.PNG
    直接添加引用,搜索office就可以,它使用的是你电脑office上的dll引用,不过感觉上使用起来比较复杂。推荐第二种。
    2. 使用Aspose.WORD for net 进行操作
    Aspose 官网下载 此处需要google CSDN下载(破解版)

    操作WORD:
    使用上面两种方式操作一个word文件都是很麻烦的,因为word和txt不同,它有很多编码,字号缩进等设置,要找到编辑的地方很麻烦。在查了一些资料以后,发现微软word有一个很好的功能书签,它可以理解为一个key,对应的value即为所需要编辑的word的地址位置。查看详细
    8387666-ff197a17af8877fe.PNG
    书签.PNG
    1. 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");

上述两种方式都可以做到我们想要的功能。
8387666-4d1df0dab1ce74f6.PNG
text.PNG
  • 日志类
    为了更好的调试代码,也为了保存一些有用的信息,所有日志是必不可少的。 已调研日志引用(EventLog Log4Net)但他们用起来都比较麻烦,因为他们都是为大型系统设计的,所以就用网上例子自己写了一个简单日志类(利用DEBUG)。
TraceHelper.GetInstance().Info("程序开始...", "Main Function");
8387666-0a7b89495d371f89.PNG
log.PNG

详细使用请看代码 github

猜你喜欢

转载自blog.csdn.net/weixin_33946605/article/details/87426701