線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2048
推到 Plurk!
推到 Facebook!

請問關於bcb連結excel的釋放問題

尚未結案
chiehjen
一般會員


發表:8
回覆:4
積分:2
註冊:2003-12-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-15 11:32:26 IP:139.175.xxx.xxx 未訂閱
請問各位前輩,我想利用OLE還有opendialog來開啟excel的檔案,目前已經可以把excel的資料讀入程式的Cells中,但是我發現程式執行完後無法釋放資源,也就是在工作管理員中都還會有EXCEL.EXE,我有去參考之前的文章提到,加入下面兩行就可以釋放。 ex.OleFunction("Quit");   ex = Unassigned; 可是我執行後一樣無效,不知道哪裡出錯,程式下  
     void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Variant ExcelAp,WorkBooks,Sheets,Sheet,WorkBook,Cell;
        int i,j;
        if(OpenDialog1->Execute())
        {
        ExcelAp=CreateOleObject("Excel.Application");
        ExcelAp.OlePropertySet("Visible",false);
        WorkBooks=ExcelAp.OlePropertyGet("WorkBooks");
        WorkBook=WorkBooks.OleFunction("Open",OpenDialog1->FileName.c_str());
        Sheets = WorkBook.OlePropertyGet("Sheets");
        Sheet = Sheets.OlePropertyGet("Item",1);
//釋放
ExcelAp.OleFunction("Quit");  
ExcelAp= Unassigned;            for(i=1;i<8;i  )
        {
                for(j=1;j<8;j  )
                {
                        Cell = Sheet.OlePropertyGet("Cells",j,i);
                        StringGrid1->Cells[i-1][j-1]=Cell.OlePropertyGet("Text");
                }
        }
        StringGrid1->RowCount=i-1;
        StringGrid1->ColCount=j-1;
發表人 - taishyang 於 2004/01/15 13:26:03
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-15 12:00:25 IP:211.22.xxx.xxx 未訂閱
您好: 是不是WorkBook要先關掉 WorkBook.Close;這是DELPHI的語法 ~~應無所住而生其心~~
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-29 10:22:50 IP:210.201.xxx.xxx 未訂閱
引言:
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Variant ExcelAp,WorkBooks,Sheets,Sheet,WorkBook,Cell;
        int i,j;
        if(OpenDialog1->Execute())
        {
        ExcelAp=CreateOleObject("Excel.Application");
        ExcelAp.OlePropertySet("Visible",false);
        WorkBooks=ExcelAp.OlePropertyGet("WorkBooks");
        WorkBook=WorkBooks.OleFunction("Open",OpenDialog1->FileName.c_str());
        Sheets = WorkBook.OlePropertyGet("Sheets");
        Sheet = Sheets.OlePropertyGet("Item",1);
//釋放
ExcelAp.OleFunction("Quit");  
ExcelAp= Unassigned;
//在這你已將Excel釋放掉了            for(i=1;i<8;i  )
        {
                for(j=1;j<8;j  )
                {
                        Cell = Sheet.OlePropertyGet("Cells",j,i);//此行用到Excel,但之前以將Excel釋放了....應該會造成錯誤
                        StringGrid1->Cells[i-1][j-1]=Cell.OlePropertyGet("Text");
                }
        }
        StringGrid1->RowCount=i-1;
        StringGrid1->ColCount=j-1;    ExcelAp.OleFunction("Quit");  
ExcelAp= Unassigned;
//試試加在這個地方
}
似乎是邏輯錯誤 應該將釋放Excel的程式放在你程序結束後,如將該釋放Excel的程式置於Button1Click底 ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
系統時間:2024-05-21 0:09:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!