C#用Com組件解析Excel檔案 然後刪除Excel 並且徹底關閉Excel進程(公司實戰項目經驗)

來源:互聯網
上載者:User

昨天客戶要求,要從Excel裡面往程式裡匯入資料,鬱悶,從來沒摸過Excel匯入這方面的東西,於是Google了一下,大約過了半個小時發現了兩個方法,一個時用Excel 的.Net Com組件去訪問,一個時用.Net ADO去訪問,考慮了一下,準備用Com去解析算了。首先用程式裡面要添加一個引用,Microsoft Office InterOp Excel ,添加完後,就可以引入Excel這個空間
using Excel = Microsoft.Office.Interop.Excel ,但調用完畢後 ,Excel進程無法徹底關閉。你會發現雖然調用了m_xlsApp.Quit();這個退出方法,但進程裡面還是會留下一個Excel.exe進程,而且剛解析的Excel檔案,也被佔用著,沒辦法馬上就釋放,所以,我刪除Excel檔案的時候也出現了問題,再解析完這個Excel檔案後,我會馬上刪除這個Excel檔案,但時Excel.exe程式沒辦法馬上釋放,所以會報異常,檔案被佔用。在網上查看了一下,終止進程的方法找到了,用記憶體回收這個方法,System.GC這個東東,強行回收掉,但不能Kill掉,因為可能會濫殺無辜,如果兩個使用者同時匯入的話,一個使用者先匯入完畢,殺進程,另一個使用者就會匯入失敗,而刪除檔案,就鬱悶了,我調試的時候,刪除檔案就沒問題,我把斷點去掉,刪除檔案就問題,我發現可能時釋放檔案的時間問題,於是,在刪除檔案的時候,我讓當前線程阻塞了0.5秒,OK,刪除沒報錯 問題解決了,哈哈,真爽~~~

這是部分代碼

  1. Excel.Application m_xlsApp = null;
  2.             Excel.Workbook m_Workbook = null;
  3.             Excel.Worksheet m_Worksheet = null;
  4.             try
  5.             {
  6.                 object objOpt = System.Reflection.Missing.Value;
  7.                 m_xlsApp = new Excel.Application();
  8.                 m_Workbook = m_xlsApp.Workbooks.Open(s_FileName, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt, objOpt);
  9.                 m_Worksheet = (Excel.Worksheet)m_Workbook.Worksheets.get_Item(sheetIndex);
  10.                 DataRow newRow;
  11.                 for (int j = 2; j <= m_Worksheet.UsedRange.Rows.Count; j++)
  12.                 {
  13.                     newRow = dtTemp.NewRow();
  14.                     for (int i = 1; i <= m_Worksheet.UsedRange.Columns.Count; i++)
  15.                     {
  16.                         if (((Excel.Range)(m_Worksheet.Cells[j, i])) != null && ((Excel.Range)(m_Worksheet.Cells[j, i])).Text.ToString() != "")
  17.                         {
  18.                             newRow[i - 1] = ((Excel.Range)(m_Worksheet.Cells[j, i])).Value2.ToString();
  19.                         }
  20.                     }
  21.                     dtTemp.Rows.Add(newRow);
  22.                 }
  23.             }
  24.             catch (Exception exc)
  25.             {
  26.                 Alert("匯入失敗~!");
  27.             }
  28.             finally
  29.             {
  30.                 m_Worksheet = null;
  31.                 m_Workbook = null;
  32.                 m_xlsApp.Quit();
  33.                 int generation = System.GC.GetGeneration(m_xlsApp);
  34.                 m_xlsApp = null;
  35.                 System.GC.Collect(generation);       
  36.                 
  37.             }
  38.             return dtTemp;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.