在這裡 ,就大概描述了在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);
}
經過測試一般是沒什麼問題的,注意釋放的順序