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

excel save and save as相關檔案存取問題

答題得分者是:senso
tkukof
一般會員


發表:2
回覆:4
積分:1
註冊:2009-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-15 14:21:42 IP:220.130.xxx.xxx 訂閱

//以下程式為小弟在板上找到的
//第一次發文,請海涵
//目的為使用者開啟存檔視窗
//假如有檔案已存在就會覆蓋
//之後在次開啟檔案寫入再次儲存

bool savepath=false;
if (SaveDialog1->Execute()) //目的為使用者開啟存檔視窗
{
savepath=true;
Variant Excel,Workbooks,Workbook;
Variant Worksheets,Worksheet, Range, Cell, FColumns, Format, Item;
Excel=CreateOleObject("Excel.Application");
Excel.OlePropertySet("Visible", true); // 設為 false 則不可見
// 產生 workbooks 跟 workbook 物件.
Workbooks=Excel.OlePropertyGet("Workbooks");
Workbook=Workbooks.OleFunction("Add");
// 產生 worksheets 跟 worksheet 物件.
Worksheets=Workbook.OlePropertyGet("Worksheets");
Worksheet=Worksheets.OlePropertyGet("Item", 1);
Workbook.OleFunction("SaveAs",SaveDialog1->FileName.c_str());
//假如有檔案已存在就會覆蓋,想問如何知道有沒有檔案存在
Excel.OlePropertySet("Visible",false);
Excel.OleFunction("Close"); //這裡會出錯
Excel.OleFunction("Quit");
}
if (savepath)
{
Variant Excel,Workbooks,Workbook;
Variant Worksheets,Worksheet, Range, Cell, FColumns, Format, Item;
Excel=CreateOleObject("Excel.Application");
Excel.OlePropertySet("Visible", true);
Workbooks=Excel.OlePropertyGet("Workbooks");
Workbook=Workbooks.OleFunction("Open", (SaveDialog1->FileName.c_str()));
// 將該Excel 檔的 Worksheets 設給變數 Worksheets.
Worksheets=Workbook.OlePropertyGet("Worksheets");
// 將 Worksheets 的第2 個 worksheet 設給變數 Worksheet.
Worksheet=Worksheets.OlePropertyGet("Item", 1);
// 取得第 (2,3) 個 cell.
Cell=Worksheet.OlePropertyGet("Cells", 2, 3);
Cell.OlePropertySet("Value", "CrazyStar"); // 設定它的文字內容為 "CrazyStar".
Excel.OleFunction("Save"); //之後在次開啟檔案寫入再次儲存,也會出錯,
//會問是否要覆蓋一個EXCEL檔案
Excel.OlePropertySet("Visible",false);
Excel.OleFunction("Close");
Excel.OleFunction("Quit");
}
------
偶肉肉
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-15 14:45:20 IP:211.72.xxx.xxx 訂閱
Excel.OleFunction("Close"); //這裡會出錯
Excel.OleProcedure("Close"); //這樣應就 OK
tkukof
一般會員


發表:2
回覆:4
積分:1
註冊:2009-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-15 17:51:53 IP:220.130.xxx.xxx 訂閱
大大 我改了還是一樣錯誤呢
------
偶肉肉
herbert2
尊榮會員


發表:58
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-15 20:07:53 IP:211.72.xxx.xxx 訂閱
把『Excel.OlePropertySet("Visible",false);』 Remark 掉, 或許便可正常 Close.
tkukof
一般會員


發表:2
回覆:4
積分:1
註冊:2009-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-16 10:24:01 IP:220.130.xxx.xxx 訂閱
把它拿掉一樣錯呢...
是沒有這個function?

------
偶肉肉
tkukof
一般會員


發表:2
回覆:4
積分:1
註冊:2009-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-09-16 11:33:45 IP:220.130.xxx.xxx 訂閱
我把close 拿掉後,
在發生saveas 部分錯誤?檔案不能覆蓋? 連對話視窗也沒有跳出.....


------
偶肉肉
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-09-16 18:08:58 IP:61.219.xxx.xxx 訂閱
Excel.OleFunction("Close");  
換成
Workbooks.OleFunction("Close");

這邊應該是關檔案還沒關Excel吧,所以用Workbooks(全book都關掉,若用Workbook則只有關掉指定的那個book)

再補充一下
Excel.OleFunction("Save"); //之後在次開啟檔案寫入再次儲存,也會出錯,
應該是
Workbook.OleFunction("Save");
編輯記錄
senso 重新編輯於 2009-09-17 09:04:51, 註解 無‧
tkukof
一般會員


發表:2
回覆:4
積分:1
註冊:2009-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-09-17 10:29:21 IP:220.130.xxx.xxx 訂閱
感謝2位高手的解答 ^^
依據s大大的說法
小弟問題已經解決
再次感謝
------
偶肉肉
系統時間:2017-10-23 17:31:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!