成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

概述ASP.NET調(diào)用Excel進(jìn)程

開發(fā) 后端
本文介紹ASP.NET調(diào)用Excel進(jìn)程,代碼在配置正確的情況下能自動(dòng)結(jié)束Excel進(jìn)程,但是前提是在操作Excel時(shí)沒有引發(fā)異常的情況下,如果有異常發(fā)生,那么Excel進(jìn)程將不能結(jié)束。

ASP.NET調(diào)用Excel進(jìn)程

關(guān)于在ASP.NET調(diào)用Excel進(jìn)程不能結(jié)束進(jìn)程的問題,常見的解決方法用的是下面這段代碼

  1. wb.Close(null,null,null);  
  2. app.Workbooks.Close();  
  3. app.Quit();  
  4.  
  5. if(rng!=null)  
  6. {  
  7. System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);  
  8. rng=null;  
  9. }  
  10. if(ws!=null)  
  11. {  
  12. System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);  
  13. ws=null;  
  14. }  
  15. if(wb!=null)  
  16. {System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);  
  17. wb=null;  
  18. }  
  19. if(app!=null)  
  20. {System.Runtime.InteropServices.Marshal.ReleaseComObject(app);  
  21. app=null;  
  22. }  
  23. GC.Collect(); 

雖然這段代碼在配置正確的情況下能自動(dòng)結(jié)束Excel進(jìn)程,但是前提是在操作Excel時(shí)沒有引發(fā)異常的情況下,如果有異常發(fā)生,那么Excel進(jìn)程將不能結(jié)束(比如:引用了一個(gè)在Excel文件中不存在的文本框時(shí)就會(huì)出現(xiàn)“HRESULT 中的異常:0x800A03EC?!保?,這時(shí)就要借助Process類的Kill()方法來結(jié)束,下面是我寫的測試代碼:

  1. usingSystem;  
  2. usingSystem.Diagnostics;  
  3. usingexcel=Microsoft.Office.Interop.Excel;  
  4.  
  5. namespaceExcelTest  
  6. {  
  7. /**////<summary> 
  8. ///Excel的摘要說明。  
  9. ///</summary> 
  10. publicclassExcel  
  11. {  
  12. privateDateTimebeforeTime;//Excel啟動(dòng)之前時(shí)間  
  13. privateDateTimeafterTime;//Excel啟動(dòng)之后時(shí)間  
  14.  
  15. excel.Applicationapp;  
  16. excel.Workbookwb;  
  17. excel.Worksheetws;  
  18. excel.Rangerng;  
  19. excel.TextBoxtb;  
  20.  
  21. publicExcel(stringtempletPath)  
  22. {  
  23. //實(shí)例化一個(gè)ExcelApplication對象并使其可見  
  24. beforeTime=DateTime.Now;  
  25. app=newexcel.ApplicationClass();  
  26. app.Visible=true;  
  27. afterTime=DateTime.Now;  
  28.  
  29. wb=app.Workbooks.Open(templetPath,Type.Missing,Type.Missing,Type.
    Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.
    Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.
    Missing,Type.Missing);  
  30. ws=(excel.Worksheet)wb.Worksheets.get_Item(1);  
  31. }  
  32.  
  33. publicvoidExcelMethod()  
  34. {  
  35. rng=ws.get_Range("B5","C7");  
  36. rng.Merge(excel.XlAxisCrosses.xlAxisCrossesAutomatic);  
  37. rng.Value2="Excel2003";  
  38.  
  39. rng=ws.get_Range("D8","E11");  
  40. rng.MergeCells=true;  
  41. rng.Value2="Excel2003";  
  42. rng.HorizontalAlignment=excel.XlHAlign.xlHAlignCenter;  
  43. rng.VerticalAlignment=excel.XlVAlign.xlVAlignCenter;  
  44.  
  45. rng=ws.get_Range("A1",Type.Missing);  
  46. rng.Value2=5;  
  47.  
  48. rng=ws.get_Range("A2",Type.Missing);  
  49. rng.Value2=7;  
  50.  
  51. for(inti=1;i<100;i++)  
  52. {  
  53. stringstrings=string.Concat("G",i.ToString());  
  54. rng=ws.get_Range(s,Type.Missing);  
  55. rng.Value2=i.ToString();  
  56. }  
  57.  
  58. tb=(excel.TextBox)ws.TextBoxes("文本框1");  
  59. tb.Text="作者";  
  60.  
  61. tb=(excel.TextBox)ws.TextBoxes("文本框2");  
  62. tb.Text="KLY.NET的Blog";  
  63.  
  64. tb=(excel.TextBox)ws.TextBoxes("文本框3");  
  65. tb.Text="日期";  
  66.  
  67.  
  68. try  
  69. {  
  70. tb=(excel.TextBox)ws.TextBoxes("文本框5");  
  71. tb.Text=DateTime.Now.ToShortDateString();  
  72. }  
  73. catch  
  74. {  
  75. //這里用Dispose()方法結(jié)束不了Excel進(jìn)程,所有還是要用Process的Kill()方法配合使用  
  76. //this.Dispose();  
  77. this.KillExcelProcess();  
  78. thrownewException("不存在ID為\"文本框5\"的文本框!");  
  79. }  
  80. finally  
  81. {  
  82. //如果有異常發(fā)生,Dispose()方法放在這里也結(jié)束不了Excel進(jìn)程  
  83. //this.Dispose();  
  84.  
  85. //如果發(fā)生異常,在這里也可以結(jié)束Excel進(jìn)程  
  86. //this.KillExcelProcess();  
  87. }  
  88. }  
  89.  
  90. /**////<summary> 
  91. ///另存為Excel文件  
  92. ///</summary> 
  93. ///<paramnameparamname="savePath">保存路徑</param> 
  94. publicvoidSaveAsExcelFile(stringsavePath)  
  95. {  
  96. wb.SaveAs(savePath,excel.XlFileFormat.xlHtml,Type.Missing,Type.
    Missing,Type.Missing,Type.Missing,excel.XlSaveAsAccessMode.xlExclusive,Type.
    Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);  
  97. }  
  98.  
  99. /**////<summary> 
  100. ///結(jié)束Excel進(jìn)程  
  101. ///</summary> 
  102. publicvoidKillExcelProcess()  
  103. {  
  104. Process[]myProcesses;  
  105. DateTimestartTime;  
  106. myProcesses=Process.GetProcessesByName("Excel");  
  107.  
  108. //得不到Excel進(jìn)程ID,暫時(shí)只能判斷進(jìn)程啟動(dòng)時(shí)間  
  109. foreach(ProcessmyProcessinmyProcesses)  
  110. {  
  111. startTime=myProcess.StartTime;  
  112.  
  113. if(startTime>beforeTime&&startTime<afterTime)  
  114. {  
  115. myProcess.Kill();  
  116. }  
  117. }  
  118. }  
  119.  
  120. /**////<summary> 
  121. ///如果對Excel的操作沒有引發(fā)異常的話,用這個(gè)方法可以正常結(jié)束Excel進(jìn)程  
  122. ///否則要用KillExcelProcess()方法來結(jié)束Excel進(jìn)程  
  123. ///</summary> 
  124. publicvoidDispose()  
  125. {  
  126. wb.Close(null,null,null);  
  127. app.Workbooks.Close();  
  128. app.Quit();  
  129.  
  130. //注意:這里用到的所有Excel對象都要執(zhí)行這個(gè)操作,否則結(jié)束不了Excel進(jìn)程  
  131. if(rng!=null)  
  132. {  
  133. System.Runtime.InteropServices.Marshal.ReleaseComObject(rng);  
  134. rng=null;  
  135. }  
  136. if(tb!=null)  
  137. {  
  138. System.Runtime.InteropServices.Marshal.ReleaseComObject(tb);  
  139. tb=null;  
  140. }  
  141. if(ws!=null)  
  142. {  
  143. System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);  
  144. ws=null;  
  145. }  
  146. if(wb!=null)  
  147. {  
  148. System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);  
  149. wb=null;  
  150. }  
  151. if(app!=null)  
  152. {  
  153. System.Runtime.InteropServices.Marshal.ReleaseComObject(app);  
  154. app=null;  
  155. }  
  156.  
  157. GC.Collect();  
  158. }  
  159. }  

這段代碼能很好的解決Excel進(jìn)程不能正常結(jié)束的問題,如果主機(jī)操作系統(tǒng)不是服務(wù)器版的話,那么就要借助于ntsd -c q -p pid命令來結(jié)束。

還有一個(gè)問題的關(guān)于Excel組件訪問權(quán)限的配置,一定要在組件服務(wù)里面正確配置,否則結(jié)束不了Excel進(jìn)程,具體的配置方法在我項(xiàng)目的doc文件夾下;在我前面的文章里面介紹了在web.config文件里面加入假扮用戶的方法,但是經(jīng)我測試發(fā)現(xiàn)這種方法雖然可以訪問Excel組件,但是結(jié)束不了進(jìn)程,除非用Kill方法強(qiáng)行結(jié)束。以上介紹ASP.NET調(diào)用Excel進(jìn)程。

【編輯推薦】

  1. ASP.NET開發(fā)技巧之Theme功能淺析
  2. 詳解ASP.NET動(dòng)態(tài)編譯
  3. Apache支持ASP.NET方法淺析
  4. 淺談ASP.NET服務(wù)器標(biāo)準(zhǔn)控件
  5. ASP.NET中SQL Server數(shù)據(jù)庫備份恢復(fù)淺析
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2009-08-05 17:15:21

ASP.NET結(jié)束Ex

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2009-07-22 16:17:39

ASP.NET AJA

2009-07-23 16:55:55

ASP.NET特點(diǎn)

2009-08-05 13:58:26

ASP.NET Mem

2009-07-27 15:52:21

ASP.NET特點(diǎn)ASP.NET概述

2009-07-29 13:04:59

2009-07-20 10:16:13

配置ASP.NET A

2009-07-22 10:09:59

ASP.NET MVC

2009-07-30 15:17:16

ASP.NET 2.0

2009-07-28 11:09:02

ASP.NET狀態(tài)類型

2009-08-05 17:54:04

ASP.NET運(yùn)行模式

2009-07-22 15:58:52

ASP.NET AJA

2009-08-04 16:46:58

ASP.NET內(nèi)置Ht

2009-08-04 15:22:33

ASP.NET緩存機(jī)制

2009-07-23 10:52:38

2009-07-30 14:55:43

ASP.NET 2.0

2009-07-29 09:29:06

ASP.NET水晶報(bào)表

2009-12-18 16:51:41

ASP.NET概述
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产不卡一区 | av国产精品 | 久久99精品国产自在现线小黄鸭 | 日本高清视频在线播放 | 宅男伊人| 国产免费一区二区三区 | 午夜精品久久久久久久久久久久久 | 久久精品国产99国产精品 | 精品国产一区二区三区久久久久久 | 国产91久久精品一区二区 | 国产精品特级片 | 中文在线一区二区 | 97久久久久久| 欧美精品中文字幕久久二区 | 一区二区三区四区电影视频在线观看 | 一区二区三区小视频 | 成人看片在线观看 | 午夜视频网站 | 五月综合久久 | 久久69精品久久久久久久电影好 | 少妇一级淫片免费放播放 | 国产美女精品 | 亚洲高清在线观看 | www视频在线观看 | 亚洲视频一区在线观看 | 一区二区三区在线免费观看 | 精品二区视频 | 国产日韩久久 | 亚洲欧美日韩激情 | 福利视频日韩 | 国产视频精品在线 | 欧美精品一区二区免费 | 久久高清 | 99爱在线观看 | 欧美在线视频网 | 国产精品一区二区在线 | 欧美精品成人一区二区三区四区 | 欧美日韩一区在线 | 欧美国产精品一区二区三区 | 激情欧美一区二区三区中文字幕 | 欧美成人手机视频 |