不忘初心,能偷懒就偷懒:C#操作Word文件
換了一家公司,新單位的信息化建設(shè)仍然在路上。OA也正在建設(shè)中,目前項(xiàng)目發(fā)票報(bào)銷等流程仍然是手工的,只能線下填單子。至于是電腦上填好打印出來還是直接空白模板打出來手寫倒是不管,隨意。疫情期間積壓了太多項(xiàng)目,所以復(fù)工后填單子很快就讓我暴躁了。尤其是大小寫金額,還有三分位的那種小寫金額的格式,浪費(fèi)了太多時(shí)間,幾乎就沒有一次成功過的,簡直不能忍。。。所以最后默默的打開了devenv。干嘛不寫個(gè)程序呢,多少能省點(diǎn)力氣。
?不過從頭按這個(gè)模板的格式一行行代碼生成Word文件看樣子工作量有點(diǎn)大,本著能偷懶就偷懶的宗旨,想到了一個(gè)辦法:空白處用先占位符代替,到程序里做替換。具體說來,就是用一些特殊的字符串先把位置占好,連帶著格式也調(diào)好,到程序里用真實(shí)有意義的內(nèi)容去替換這些特殊字符串,就像下圖:
?所以需求就轉(zhuǎn)換成了如何用C#實(shí)現(xiàn)Word的字符串替換。顯然有這個(gè)需求的人應(yīng)該也不少,網(wǎng)上很快就找到了相關(guān)代碼,經(jīng)測試靠譜。操作Word文檔替換文字的核心代碼為(需要在項(xiàng)目中引入word的com):
private void FindAndReplace(Microsoft.Office.Interop.Word.Application WordApp, object findText, object replaceWithText){object matchCase = true; // 重點(diǎn)關(guān)注!!object matchWholeWord = false; // 重點(diǎn)關(guān)注!!object matchWildCards = false;object matchSoundsLike = false;object nmatchAllWordForms = false;object forward = true;object format = false;object matchKashida = false;object matchDiacritics = false;object matchAlefHamza = false;object matchControl = false;object read_only = false;object visible = true;object replace = 2;object wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;WordApp.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, ref matchWildCards, ref matchSoundsLike,ref nmatchAllWordForms, ref forward,ref wrap, ref format, ref replaceWithText,ref replaceAll, ref matchKashida,ref matchDiacritics, ref matchAlefHamza,ref matchControl);}?調(diào)用的核心代碼為:
// 打開文檔MSWord.Application wordApp = new MSWord.Application(); MSWord.Document wordDoc = wordApp.Documents.Open(帶占位符的模板文件名);wordApp.Visible = false;wordDoc.Activate();FindAndReplace(wordApp, "##YY", txtYear.Text.Trim());FindAndReplace(wordApp, "#M", txtMonth.Text.Trim());FindAndReplace(wordApp, "#D", txtDay.Text.Trim());FindAndReplace(wordApp, "@@SY", txtSY.Text.Trim());FindAndReplace(wordApp, "@@XX", txtJE.Text.Trim());FindAndReplace(wordApp, "@@DX", txtCHN.Text.Trim());FindAndReplace(wordApp, "@@GS", txtCorp.Text.Trim());FindAndReplace(wordApp, "@@ZS", txtDJ.Text.Trim());wordDoc.Save();wordDoc.Close();wordApp.Quit();大小寫轉(zhuǎn)換的代碼略了,反正網(wǎng)上到處都是。小寫金額加三分位也很簡單,ToString("#,##0.00")即可。軟件界面也略了,總之就是一堆Text控件用以輸入與占位符對(duì)應(yīng)的內(nèi)容。
運(yùn)行后打開程序修改過的Word效果如下:
?這下可以稍微平復(fù)一下暴躁的心情了,不過還是希望OA能早點(diǎn)建好。
總結(jié)
以上是生活随笔為你收集整理的不忘初心,能偷懒就偷懒:C#操作Word文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web前端html怎么求最大值和最小值,
- 下一篇: found zsh 所有命令在终端失效