国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C# > 正文

C# WORD操作實現代碼

2019-10-29 21:48:31
字體:
來源:轉載
供稿:網友
在當前項目開發過程中,客戶有根據數據庫數據生成WORD文檔的需求,在和同事溝通的過程中,找到了兩個解決方案
 
 
1.先通過程序生成報表樣式的HTML頁面,然后修改HTML頁面的后綴名為DOC。 
2.定制WORD文檔的模板文件,在C#中操作WORD模板,生成新的WORD文檔。 
第一方案簡單,只需要改動文件的擴展名就行了,但是也存在了一些問題,譬如生成的WORD文檔樣式的丟失。這樣對于客戶來說可能是一個無法通過的方案。第二方案比較復雜,需要調用OFFICE的WORD組件通過C#來操作WORD,進而生成WORD。此方法類似于我們在c#中的后臺拼接數據。雖然麻煩,但是能夠靈活定制,只不過是操作WORD對象而已。 
經過再三考慮:決定用第二種方法來生成WORD報告文檔。 
通過自己的實踐,這個需求總算是搞定了,在實際開發的過程中,遇到了這樣那樣的問題,還好,通過不斷的查找網絡資源,結合實際開發中的情況,問題都得到了解決。現將本人在開發過程中的一些理解與經驗總結一下: 
在VS2008平臺下,引用.net-Microsoft.Office.Interop.Word.12,這樣就可以在程序用操作WORD對象了。 
通過簡單執行,報了80070005錯誤,這個錯誤是因為權限不夠,需要在DCOM配置中更改.net和IIS用戶的操作權限,具體修改過程如下: 解決方法一: 
1.控制面板-》管理工具-》組件服務-》計算機-》我的電腦-》DCom配置-》找到Microsoft Word文檔之后,單擊屬性打開此應 用程序的屬性對話框。 
2.單擊標識選項卡,然后選擇交互式用戶。 
3.單擊"安全"選項卡,分別在"啟動和激活權限"和"訪問權限"組中選中"自定義",然后自定義->編輯->添加ASP.NET賬戶和IUSER_計算機 名。 
4. 確保允許每個用戶訪問,然后單擊確定。 
5. 單擊確定關閉 DCOMCNFG。 
如果上述方法不能解決問題,就應該是權限問題,請嘗試用下面的方法: 
在web.config中使用身份模擬,在<system.web>節中加入 <identity impersonate="true" userName="你的用戶名 " password="密碼 "/> 
</system.web> 
解決了上述問題,開始考慮如何創建WORD模板文件,WORD的模板文件其實就是通過書簽來添加內容的。也就是通過在WORD文檔中創建書簽,然后在程序中獲取模板文件的所有書簽,通過給書簽賦值來進行文檔生成的。 
在程序中的操作流程如下: 
聲明WORD程序的對象 → 聲明一個WORD文檔對象 → 獲取當前的操作文檔對象 → 獲取文檔所有的書簽 → 將數據庫數據賦值到對應的書簽 → 將文檔另存為指定的文件夾下. 
下面將針對農業植物測試報告來分析具體的代碼實現: 
復制代碼代碼如下:

//生成WORD程序對象和WORD文檔對象 
Microsoft.Office.Interop.Word.Application appWord = new Application(); 
Microsoft.Office.Interop.Word.Document doc = new Document(); 
object oMissing = System.Reflection.Missing.Value;//這個是什么東西,我始終沒搞明白-_- 
//打開模板文檔,并指定doc的文檔類型 
object objTemplate = Server.MapPath(p_TemplatePath); 
object objDocType = WdDocumentType.wdTypeDocument; 
doc = (Document)appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue); 
//獲取模板中所有的書簽 
Bookmarks odf = doc.Bookmarks; 
string[] testTableremarks = { "ApplyNo", "AuditingDate", "Auditor", "CheckDate", "Checker"}; 
string[] testTablevalues = { "ApplyNo", "AuditingDate", "Auditor", "CheckDate", "Checker",}; 
//循環所有的書簽,并給書簽賦值 
for (int oIndex = 0; oIndex < testTableremarks.Length; oIndex++) 

obDD_Name = WD + testTableremarks[oIndex]; 
doc.Bookmarks.get_Item(ref obDD_Name).Range.Text = p_TestReportTable.Rows[0][testTablevalues [oIndex]].ToString();//此處Range也是WORD中很重要的一個對象,就是當前操作參數所在的區域 

//第四步 生成word,將當前的文檔對象另存為指定的路徑,然后關閉doc對象。關閉應用程序 
object filename = Server.MapPath(p_SavePath) + "//Testing_" + DateTime.Now.ToShortDateString() + ".doc"; 
object miss = System.Reflection.Missing.Value; 
doc.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss); 
object missingValue = Type.Missing; 
object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges; 
doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue); 
appWord.Application.Quit(ref miss, ref miss, ref miss); 
doc = null; 
appWord = null; 
this.Hid_ShowMessage.Value = "生成成功!";

上述代碼就是一個通過模板文件生成WORD的過程。其實也就是一個替換書簽內容的過程。 
在開發的過程中,有些數據是動態增加的,假如我要向一個表格中動態的添加幾行數據,就無法用替換書簽的方式來進行操作,需要通過程序在文檔頁面的表格中添加行。 
向表格中添加行,有兩種操作形式:一種是在WORD模板中已經存在了一個表格。一種是我們在程序中直接添加一個表格對象。 
第一種情況下,需要注意:在WORD模板中要操作的表格中,不能有縱向合并的單元格,不然程序無法獲取到當前要操作對象導致程序報錯.單元格的合并,我們可以在程序中控制。 
第二種情況下就需要我們通過程序去直接添加表格了。 
生成表格的代碼具體如下: 
1.獲取文檔中已存在的表格: 
Microsoft.Office.Interop.Word.Table characterTable = doc.Tables[2];//在document對象的集合操作中,起始點是從1開始,并不是從0開始的,此處需要注意。 
2.在文檔中直接生成表格,首先要獲取插入表格的位置,然后添加表格對象: 
object oEndOfDoc = "//endofdoc";//WORD中預定義的書簽,還有很多,此處就不一一列舉。 
object oMissing = System.Reflection.Missing.Value; 
Range wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;//獲取當前文檔的末尾位置。 
wrdRng.InsertAfter(" ");//插入一行,此處不能用 wrdRng.InsertAfter(""),如果用這個,就不能換行,我也不知道為什么。 
復制代碼代碼如下:

object oCollapseEnd = Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd; 
object oPageBreak = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;//分頁符 
wrdRng.Collapse(ref oCollapseEnd); 
wrdRng.InsertBreak(ref oPageBreak);//插入了一頁 
wrdRng.Collapse(ref oCollapseEnd); 
wrdRng.InsertAfter("圖片信息"); 
wrdRng.Font.Size = 20;//指定操作對象的文字大小 
wrdRng.Font.Bold = 1;//指定操作對象的粗體:1為粗體,0為正常 
wrdRng.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;//指定操作區域的文字布局:居中對齊 
//上述代碼的意思是:找到當前的末尾位置,然后插入一個分頁符,相當于跳到了一個新頁,在這個新頁的頂端寫入文字“圖片信息”,并指定文字大小為20,粗體居中顯示。 
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range; 
wrdRng.InsertAfter(" "); 
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range; 
wrdRng.InsertParagraphAfter();//插入一個段落,在此段落上插入一個2行一列的表格。 
Microsoft.Office.Interop.Word.Table newTable = doc.Tables.Add(wrdRng, 2, 1, ref oMissing, ref oMissing);

我們還可以對表格進行格式設置,此處我們就不在一一列舉。 
3.下面我們分析一下對表格的單元格的操作:合并,拆分。這個就需要我們根據實際表格來進行操作: 
//獲取具體的某個單元格(1,1),獲取第一行第一列的單元格 
Cell cell = doc.Tables[1].Cell(1,1); 
cell.Range.Text="Text";//指定當前單元格的內容為Text 
在Table的操作中,添加新行: 
object beforeRow = doc.Tables[1].Rows[2];//此行是先獲取到第二行 
doc.Tables[1].Rows.Add(ref beforeRow);//效果類似于在WORD中此表格的第二行上進行【插入行】操作,插入的新行將會插入到當前行的上一行中,格式也是和此行一致的。 
//合并單元格:感覺在此處合并單元格挺傻瓜的,你只需要指定你要合并的起始單元格和結束單元格,然后通過Merge操作就行了 
Cell cell = doc.Tables[1].Cell(iRow, 2);//列合并 
cell.Merge(doc.Tables[1].Cell(iRow, 6)); 
Cell cell1 = doc.Tables[1].Cell(iRow - 1, 1);//行合并 
cell1.Merge(doc.Tables[1].Cell(iRow + 1, 1)); 
上述操作就是在此程序中用到的一些知識點,還有好多的東西需要去熟悉、理解。 
另外,在程序的測試過程中發現,當執行一次文檔生成后,在資源管理器中始終有winword.exe進程殺不掉,目前的解決辦法是:直接殺進程,代碼如下: 
復制代碼代碼如下:

protected void killAllProcess() // 殺掉所有winword.exe進程 

System.Diagnostics.Process[] myPs; 
myPs = System.Diagnostics.Process.GetProcesses(); 
foreach (System.Diagnostics.Process p in myPs) 

if (p.Id != 0) 

string myS = "WINWORD.EXE" + p.ProcessName + " ID:" + p.Id.ToString(); 
try 

if (p.Modules != null) 
if (p.Modules.Count > 0) 

System.Diagnostics.ProcessModule pm = p.Modules[0]; 
myS += "/n Modules[0].FileName:" + pm.FileName; 
myS += "/n Modules[0].ModuleName:" + pm.ModuleName; 
myS += "/n Modules[0].FileVersionInfo:/n" + pm.FileVersionInfo.ToString(); 
if (pm.ModuleName.ToLower() == "winword.exe") 
p.Kill(); 


catch 
{ } 
finally 






目前為止,一個WORD文檔就生成了。上述為我在這個程序開發中遇到的問題和解決方法,可能有好多地方都是考慮不全的,如果在程序開發中對WORD的操作有新的認識的話,歡迎和我溝通交流,彼此提高! 
下邊是在網上一些比較好的摘抄: 
創建新Word 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, 
ref oMissing, ref oMissing); 

打開文檔: 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
object fileName = @"E:CCCXCXXTestDoc.doc"; 
oDoc = oWord.Documents.Open(ref fileName, 
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 

導入模板 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
object fileName = @"E:XXXCCXTest.doc"; 
oDoc = oWord.Documents.Add(ref fileName, ref oMissing, 
ref oMissing, ref oMissing); 

.添加新表 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, 
ref oMissing, ref oMissing); 
object start = 0; 
object end = 0; 
Word.Range tableLocation = oDoc.Range(ref start, ref end); 
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); 

.表插入行 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, 
ref oMissing, ref oMissing); 
object start = 0; 
object end = 0; 
Word.Range tableLocation = oDoc.Range(ref start, ref end); 
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); 
Word.Table newTable = oDoc.Tables[1]; 
object beforeRow = newTable.Rows[1]; 
newTable.Rows.Add(ref beforeRow); 

.單元格合并 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, 
ref oMissing, ref oMissing); 
object start = 0; 
object end = 0; 
Word.Range tableLocation = oDoc.Range(ref start, ref end); 
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); 
Word.Table newTable = oDoc.Tables[1]; 
object beforeRow = newTable.Rows[1]; 
newTable.Rows.Add(ref beforeRow); 
Word.Cell cell = newTable.Cell(1, 1); 
cell.Merge(newTable.Cell(1, 2)); 

.單元格分離 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
oDoc = oWord.Documents.Add( oMissing, 
ref oMissing, ref oMissing); 
object start = 0; 
object end = 0; 
Word.Range tableLocation = oDoc.Range(ref start, ref end); 
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); 
Word.Table newTable = oDoc.Tables[1]; 
object beforeRow = newTable.Rows[1]; 
newTable.Rows.Add(ref beforeRow); 
Word.Cell cell = newTable.Cell(1, 1); 
cell.Merge(newTable.Cell(1, 2)); 
object Rownum = 2; 
object Columnnum = 2; 
cell.Split(ref Rownum, ref Columnnum); 

通過段落控制插入 
復制代碼代碼如下:

object oMissing = System.Reflection.Missing.Value; 
object oEndOfDoc = "/endofdoc"; /**//* endofdoc is a predefined bookmark */ 
//Start Word and create a new document. 
Word._Application oWord; 
Word._Document oDoc; 
oWord = new Word.Application(); 
oWord.Visible = true; 
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, 
ref oMissing, ref oMissing); 
//Insert a paragraph at the beginning of the document. 
Word.Paragraph oPara1; 
oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing); 
oPara1.Range.Text = "Heading 1"; 
oPara1.Range.Font.Bold = 1; 
oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph. 
oPara1.Range.InsertParagraphAfter(); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
丁香视频免费观看| а√最新版地址在线天堂| 免费在线黄色av| 久久av少妇| 国产日本在线视频| 精品日韩av| 天天艹天天操| 国产免费av网站| 中文字幕人成高视频| 国产精品入口麻豆电影| 精品一区二区在线欧美| 三级小说一区| 2021av天天| 午夜视频在线看| 一本大道香蕉久久| 国产有码在线| 在线视频三级| 国产麻豆精品高清在线播放| 6699久久国产精品免费| 任你操视频在线观看| 中文字幕有码在线视频| h视频在线网站| 国产精品美女一区二区视频| 精品亚洲综合| 最近中文av字幕在线中文| 国产精品扒开做爽爽爽的视频| av手机免费观看| 中文字幕第一页在线| 美女免费视频黄| av在线1区2区| 亚洲字幕成人中文在线观看| 亚洲videos| 国产原创av在线| 白浆爆出在线观看| 精品亚洲成a人片在线观看| 福利视频在线看| 懂色一区二区三区| 国产一级又黄| 91xx在线观看| 欧美精品久久久久久久小说| 国产调教视频在线观看| 日本高清不卡中文字幕| 欧美性猛交p30| 国产精彩视频在线观看免费蜜芽| 青青草原av在线| 超碰97在线免费观看| 日本欧洲一区| eeuss影影院www在线播放| 精品久久亚洲一级α| 夜夜爽视频导航| 色吊丝av中文字幕| 欧美日韩不卡中文字幕在线| 啪啪免费视频一区| 国产在线播放av| 伊人网站在线| 欧洲有码在线视频| 黄色片大全在线观看| 丁香花在线电影| 国产精品久久麻豆| 影音先锋中文字幕在线| 国产黄视频在线观看| √天堂资源中文www| 亚洲精品视频区| 成网站在线观看人免费| 国产深夜福利| www.狠狠| 中文字幕av高清| 国产在线高清| 92久久精品| 亚洲一本大道| 中文字幕不卡| 午夜在线视频| 国产精品久久久久久久久鸭| 亚洲精品自拍区在线观看| 国产69精品久久app免费版 | 国产精品久久久久一区二区国产| 国产黄视频在线观看| 日本h视频在线观看| 国产福利在线观看| 九色在线网站| 在线免费看黄网站| 黄色电影网站在线观看| 久久亚洲国产成人亚| 中文字幕av高清在线观看| 亚洲欧美精品日韩欧美| 天堂在线亚洲| 青青艹在线视频| 在线观看wwww| 国产高清在线视频| 最近中文字幕av免费高清| www.蜜桃av| 亚洲视频精品在线观看| 国产激情三区| 国产免费黄色| 国产精品一区牛牛影视| 精品剧情v国产在线观看| 高清av在线| 亚洲wwwwww| 在线黄色av| 影音av资源站| 亚洲精品午夜级久久久久| 国产盗摄一区二区| 国产香蕉视频在线看| 2018av男人天堂| 国产三级视频在线播放线观看| 国产免费网址| 国产一二三四| 国产色婷婷在线| 国产高清自拍视频在线观看| 国产高清大尺度一区二区不卡| 国产精品欧美色图| 国产伦精品一区二区三区高清版禁| 黄色av免费在线| 国产素人视频在线观看| 国产精品秘入口| 精品美女视频在线观看免费软件| 国产xxx在线| 在线激情小视频| 免费的黄网站在线观看| 国产美女一区视频| 国产精品被窝福利一区| 伊人网在线免费观看| 波多野结衣久久高清免费| 国产在线一二三区| 777电影在线观看| 青草av在线| 天天操人人干| 中文字幕2019第三页| 国产在线三区| 国产乱子伦三级在线播放| 久精品在线观看| 国产亚洲精品自在线观看| 99免费视频| 黄色一级片视频| 在线免费观看黄色av| 精品国内一区二区三区免费视频 | 一个人看的www免费观看视频| 91亚洲欧美| av中文在线| 国产精选一区二区三区不卡催乳| 国产福利图片| 激情六月丁香| www免费在线观看视频| 国产精品久久精品牛牛影视| www.亚洲视频| 国产porn在线| 中文字幕中文字幕在线中高清免费版 | 中文字幕国产欧美| 伊人222成人综合网| 国产精品臀控福利在线观看| 中文字幕在线看精品乱码| 亚洲视频日韩| 在线观看视频污| 91中文字幕| 91这里只有精品| 超碰在线影院| 全网国产福利在线播放| 伊人春色在线| 在线中文字幕观看| 中文字幕在线看精品乱码| 91超碰免费在线| 99视频免费在线观看| av丝袜在线| 亚洲成人av高清| 在线免费观看黄色av| 国产丝袜护土调教在线视频| 日本一本久久| 国产视频一二三区| 久久香蕉av| 91caoporn在线| 粉嫩av一区| 国产精品入口免费麻豆| 九九在线观看免费视频| 国产视频二区在线观看| 国产原创在线播放| 国产伦精品一区二区三区高清版禁| 国产尤物一区二区三区| 国产成人午夜精品| 国产精品白浆视频免费观看| 永久免费在线观看| 国产黄在线看| a√在线视频| 在线中文字幕观看| 午夜影院免费| 九九视频精品在线| 国产一级二级三级在线观看| 国产丝袜自拍| 伊人影院在线播放| 性色视频在线| 丁香花在线电影| 国产福利在线免费观看| 伊人av免费在线观看| 久热久精久品这里在线观看| 国产无遮挡又黄又爽免费网站| 国产精品视频一区麻豆| 精品街拍一区二区| 黄色av网址在线免费观看| 国产福利一区二区在线精品| 免费黄色网页在线观看| 91欧洲在线视精品在亚洲|