国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

.net下實(shí)現(xiàn)Word動(dòng)態(tài)填加數(shù)據(jù)打印

2024-07-10 13:14:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
今天研究了一下.net下實(shí)現(xiàn)Word動(dòng)態(tài)填加數(shù)據(jù)打印的做法,覺(jué)得頗有收獲~ 
以前做過(guò)Excel相關(guān)的東西,所以對(duì)OFFICE的COM有一些了解,很順利的找到了需要引用的COM和其幫助文檔~具體做法是在引用里添加 COM --------Microsoft word 11.0 object library, 然后引入命名空間: 
復(fù)制代碼代碼如下:

using WordApplication = Microsoft.Office.Interop.Word.Application; 
using Document = Microsoft.Office.Interop.Word.Document; 
using Bookmark = Microsoft.Office.Interop.Word.Bookmark; 
具體實(shí)現(xiàn)代碼: 

WordApplication word = null; 
/**//// <summary> 
/// 實(shí)現(xiàn)動(dòng)態(tài)添加數(shù)據(jù)打印預(yù)覽 
/// </summary> 
/// <param name="path">word模板路徑</param> 
/// <param name="adStu">調(diào)劑學(xué)生相關(guān)信息對(duì)象</param> 
private void PrintPreview(string path, AdStuInfo adStu) 
...{ 
if (word == null) 
...{ 
word = new WordApplication(); 

object oMissing = System.Reflection.Missing.Value; //這個(gè)東西找了好久,不像操作Excel,用Type.mising還不行. 
object path1 = (object)path; 
Document doc = null; 
doc = word.Documents.OpenOld(ref path1, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 
替換書(shū)簽#region 替換書(shū)簽 
object markName = "報(bào)考單位"; 
Bookmark bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = adStu.SiSch; 
markName = "報(bào)考專業(yè)"; 
bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = adStu.SiMa; 
markName = "考生姓名1"; 
bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = adStu.Name; 
markName = "考生編號(hào)"; 
bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = adStu.No; 
markName = "調(diào)劑專業(yè)"; 
bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = adStu.AdMa; 
markName = "打印時(shí)間"; 
bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = GetDate().ToString(); 
markName = "考生姓名2"; 
bm = doc.Bookmarks.get_Item(ref markName); 
bm.Range.Text = adStu.Name; 
#endregion 
word.Visible = true; 
doc.PrintPreview(); 
具體解釋: 首先有一個(gè)模板.doc文件,在該模板內(nèi)需要添加數(shù)據(jù)的地方設(shè)置成書(shū)簽,.net程序所要的事情就是打開(kāi)該模板,用具體需要添加的值去替換先設(shè)定好的書(shū)簽,然后返回Word的打印預(yù)覽頁(yè)面,思路很簡(jiǎn)單~但是問(wèn)題也是有滴~~ 

這個(gè)程序是做打印我們學(xué)院研究生辦發(fā)復(fù)試生調(diào)卷函用的,但是表格是從學(xué)校研究生部那弄來(lái)的,主要還是在那邊蓋的章~所以就只能用那些表格來(lái)打,但是給的表格留的空實(shí)在太小,沒(méi)法用同樣的字體給打上去,怪就只能怪研究生部根本沒(méi)想到我們這會(huì)有這個(gè)高級(jí)的東西~~哈哈~估計(jì)一般都是手工填的~~~明天過(guò)去不知道具體要怎么弄,估計(jì)這東西在打印調(diào)卷函是發(fā)揮不出作用了~~~留著以后肯定有用! 

4月16日修改: 

幾天前做的仔細(xì)想想還是有需要改進(jìn)的地方.我前面做的只是一個(gè)個(gè)文檔的填,一個(gè)個(gè)的打印,考慮資料上百個(gè)以后這樣做打印機(jī)的打印的效率不高,因?yàn)槊看沃唤o打印機(jī)發(fā)送一個(gè)打印任務(wù),它接受下一個(gè)任務(wù)是需要時(shí)間的,所以我的想法是把需要打印的文檔生成成一個(gè)文檔,這樣不但可以保存文檔,還可以只要向打印機(jī)發(fā)送一個(gè)任務(wù)就可以打印資料了,NB的打印機(jī)打印速度是很快的~~ 

把具體的操作寫(xiě)下來(lái)吧~思路是打開(kāi)兩個(gè)word文檔(當(dāng)然,生成過(guò)程中全不可見(jiàn)),一個(gè)還是按照前面說(shuō)的替換書(shū)簽,但是不做打印處理,而是復(fù)制到另外一個(gè)文檔(該文檔存儲(chǔ)所有已經(jīng)生成好的表格,最后得到的就是這個(gè)word文檔,打印或者保存隨便他們).具體的代碼如下: 



先在using里引如: 
using Range = Microsoft.Office.Interop.Word.Range; 

doc.Content.Copy(); //復(fù)制doc里的內(nèi)容,doc是每次做替換書(shū)簽的文檔. 
object save = false; 
doc.Close(ref save, ref oMissing, ref oMissing); //關(guān)閉doc. 
Range range = printDoc.Content; //全中printDoc里的全部?jī)?nèi)容,printDoc是目標(biāo)保存文檔. 
range.Collapse(ref oMissing); //確定粘貼的位置,其實(shí)這個(gè)地方我想放一個(gè)有效的參數(shù),把粘貼的位置設(shè)為文檔的末尾,而不是用默認(rèn)的文檔的最前面,但是幫助文檔是VB寫(xiě)的,傳了一個(gè)Direction:=wdCollapseEnd的東東,我弄半天沒(méi)弄出來(lái),虧我還是懂VB的~~傷心~以至于我都忘了傳個(gè)空值過(guò)去,卡了老半天!謝謝某人和我發(fā)了幾條短信,就一下把我打通了~ 
range.Paste(); //粘貼到目標(biāo)位置,一次填寫(xiě)就完成了. 


雖然是這樣,但是在生成目標(biāo)文檔的時(shí)候也是很耗資源的,我看了一下那程序竟然占了100多M的內(nèi)存!!而且~~而且~~我的機(jī)器在前兩次實(shí)驗(yàn)都沒(méi)頂住!死機(jī)了~~當(dāng)時(shí)真是在抓狂了~誰(shuí)知道后來(lái)幾次竟然無(wú)聲無(wú)息的成功!可是想想學(xué)院那機(jī)器能扛住么~~哎繼續(xù)優(yōu)化吧!這次把界面也改了一下,上面的生成在一的單獨(dú)線程里,以至于主界面不會(huì)像死了樣的,而且在主界面上還做了個(gè)顯示生成狀態(tài)的Lable,這東西還真管用~后面兩次的實(shí)驗(yàn),看著已生成數(shù)目超過(guò)前兩次死機(jī)的數(shù)目~~緊張的心情緩解了~再看著數(shù)目超過(guò)100~~高興了~最后慢慢接近完成數(shù)目時(shí)~~興奮得抓狂!!!!!哈~~ 

哎~廢話多了點(diǎn)~有用的就那么幾行代碼~ 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 电白县| 广平县| 玉屏| 五台县| 大宁县| 哈尔滨市| 清水河县| 祁阳县| 临桂县| 连江县| 温泉县| 昌吉市| 遵化市| 德令哈市| 岳阳县| 樟树市| 望都县| 宁陕县| 朝阳县| 苗栗县| 霍城县| 凉山| 阿拉善右旗| 大悟县| 磴口县| 磐安县| 凤山县| 莱西市| 酒泉市| 巍山| 太保市| 德庆县| 阿巴嘎旗| 铁力市| 黄大仙区| 普定县| 包头市| 通州市| 全椒县| 罗甸县| 乃东县|