程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Excel 二次開發系列(1): Excel 編成模型

Excel 二次開發系列(1): Excel 編成模型

編輯:.NET實例教程


Excel 二次開發系列(1): Excel 編成模型

  在這裡 ,就大概描述了在Excel 編程中常用的對象的層次關系。

  Excel Application   代表整個 Microsoft Excel 應用程序,

  WorkBook            代表 Microsoft Excel 工作簿

  Range                    代表某一單元格、某一行、某一列、某一選定區域(該區域可包含一個或若干連續單元格區域),或者某一三維區域。

  Areas                       選定區域內的子區域或連續單元格塊的集合。

  Borders                 代表對象的邊框。

  Characters             代表包含文本的對象中的字符。可用 Characters 對象修改包含在完整文本字符串中的任意字符序列。

  Font                        包含對象的字體屬性(字體名稱、字體大小、字體顏色等)。

  ListRow                 代表列表對象中的一行。

  Errors                      表示區域的電子表格錯誤。

Excel進程在程序中處理

  徐先生在Excel進程中出理的方式用了時間推算法,雖然不失為一種方法,但是這不是一個很好的辦法,因為當客戶在這個時間內打開一個Excel 文檔的時候,在運用程序關閉的同時也關閉了用戶打開的這個程序,這是用戶不想看到的,當然,在多用戶的條件下運行,就像徐說的,也是有問題的。我們知道,Excel編程調用了COM 組建,要釋放其資源是一件很頭疼的事情,除此之外,在Debug下,調式程序也是很難的意見事情,因為有時候行號和當前的光標不匹配,給調式帶來視覺誤差。調式也是要一定技巧的,以後有時間慢慢說。回到資源釋放問題:我也查閱了很多資料,一般有以下幾種解決方法:

  (1). 在對象退出之前調用系統已有方法進行釋放。例如:

      Excel.Application app = new Excel.Application();//open one Excel application 
        .............     
     app.Quit();//quit the Excel application and release resource

  一般的話只要調用這個Quit()這個方法,資源一般都會釋放。

  (2). 為確寶資源的釋放,可以在運行程序退出後,在RunTime再次對垃圾進行回收,可以用如下方法:

  ReleaseCOM

        private void ReleaseCOM(object pObj)  
        {
            try {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pObj);
            }
            catch {
                throw new Exception("Release resource Error!");
            }
            finally { pObj = null; }
        }
        private void Operate(string pFileName)
        {
            Microsoft.OfficeOffice.Interop.Excel.Application app = new Excel.Application();//打開一個Excel應用
            if (app == null)
            {
                return;
            }
            Workbooks wbs = app.Workbooks;
            _Workbook wb = wbs.Add(pFileName);//打開一個現有的工作薄
            Sheets shs = wb.Sheets;
            _Worksheet sh = (_Worksheet)shs.get_Item(1);//選擇第一個Sheet頁
            if (sh == null)
            {
                return;
            }
            Range r = sh.get_Range("B1", Missing.Value);
            if (System.Convert.ToString(r.Value2).Trim().Equals("my"))
            {
                //Do Something.
            }
            // invoke ReleaseCOM function to release resource
            ReleaseCOM(sh);
            ReleaseCOM(shs);
            ReleaseCOM(wb);
            ReleaseCOM(wbs);
            app.Quit();
            ReleaseCOM(app);
       }


  經過測試一般是沒什麼問題的,注意釋放的順序

本文作者:未知
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved