起源
我哥在家鄉(xiāng)的一家電影放映場(chǎng)工作萧吠,由于不太先進(jìn)的設(shè)備,導(dǎo)致每一次打印機(jī)打出都號(hào)碼都與座位號(hào)對(duì)應(yīng)不上桐筏,所以就跟我聊纸型,問(wèn)能不能寫一個(gè)方便一點(diǎn)的小系統(tǒng)。
抽象設(shè)計(jì)
- 選擇編程語(yǔ)言
這個(gè)小代碼的難點(diǎn)是如何操作(WORD文本)以及如何方便安裝使用九昧,至于性能绊袋,可能不需要考慮的太多。由于之前寫了兩個(gè)JAVA與PHP的WEB網(wǎng)站铸鹰,就想用WEB網(wǎng)站的形式癌别。但是由于需要穩(wěn)定服務(wù)器就被迫放棄了,因?yàn)闆](méi)有必要蹋笼。
簡(jiǎn)單調(diào)研了一下展姐,決定用C#編寫一個(gè)單機(jī)版的客戶端小程序。一是因?yàn)楹?jiǎn)單剖毯,二是因?yàn)閏#對(duì)word的操作應(yīng)該更好支持圾笨。 - 是否選擇數(shù)據(jù)庫(kù)
如上面所言,使用數(shù)據(jù)庫(kù)還要安裝逊谋,使用線上資源沒(méi)必要擂达,而且就算使用本地?cái)?shù)據(jù),由于操作可能需要一定的技術(shù)功底胶滋,所以也暫時(shí)放棄板鬓。
-程序設(shè)想
一個(gè)單機(jī)版的可以通過(guò)word模板去生成對(duì)應(yīng)的電影票信息的word文本的軟件。
難點(diǎn)解析
c#直接使用net框架很方面的完成圖形界面的編寫以及按鈕的顏色改變,按鈕信息獲取等部宿,這些就不再闡述了抄腔,接下來(lái)我主要寫一下關(guān)于如何使用c#操作word以及如何編寫一個(gè)簡(jiǎn)單的日志類。已售出自動(dòng)修改為紅色且不再可選,點(diǎn)擊座位號(hào)赫蛇,確認(rèn)可以生成對(duì)應(yīng)word.
-
操作word模板
c#操作word的兩種方式:
1. 使用office.Core.dll 引用
2. 使用Aspose.WORD for net 進(jìn)行操作
Aspose 官網(wǎng)下載 此處需要google CSDN下載(破解版)
操作WORD:
使用上面兩種方式操作一個(gè)word文件都是很麻煩的作煌,因?yàn)閣ord和txt不同掘殴,它有很多編碼,字號(hào)縮進(jìn)等設(shè)置粟誓,要找到編輯的地方很麻煩奏寨。在查了一些資料以后,發(fā)現(xiàn)微軟word有一個(gè)很好的功能書簽鹰服,它可以理解為一個(gè)key病瞳,對(duì)應(yīng)的value即為所需要編輯的word的地址位置。查看詳細(xì)- office 操作代碼
//賦值書簽名
oBookMark[0] = "movieName";
oBookMark[1] = "pai";
oBookMark[2] = "pai1";
oBookMark[3] = "hao";
oBookMark[4] = "hao1";
doc = wordApp.Documents.Open("D://test//test.doc");
//插入對(duì)應(yīng)書簽 對(duì)應(yīng)值
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);
//移動(dòng)并寫對(duì)應(yīng)信息
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");
上述兩種方式都可以做到我們想要的功能悲酷。-
日志類
為了更好的調(diào)試代碼套菜,也為了保存一些有用的信息,所有日志是必不可少的设易。 已調(diào)研日志引用(EventLog Log4Net)但他們用起來(lái)都比較麻煩逗柴,因?yàn)樗麄兌际菫榇笮拖到y(tǒng)設(shè)計(jì)的,所以就用網(wǎng)上例子自己寫了一個(gè)簡(jiǎn)單日志類(利用DEBUG)顿肺。
TraceHelper.GetInstance().Info("程序開(kāi)始...", "Main Function");