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

請問如何把Excel的存檔功能取消

尚未結案
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-27 08:10:18 IP:211.20.xxx.xxx 未訂閱
目前我可以用程式呼叫Excel起來並且開啟某一檔案 讓使用者可以在Excel內編輯和列印 但是我希望可以把Excel的存檔功能取消,不要讓他們存檔或另存新檔 我知道這沒有意義,因為只要全選Copy再手動開新的Excel(不透過我的程式),做貼上就可以破解了 只是,有人就是鐵齒,一定要我做這個功能 請問各位大大,有沒有可能做的到這樣的功能 發表人 - taishyang 於 2004/08/27 09:07:54
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-27 10:35:47 IP:219.84.xxx.xxx 未訂閱
另一個方法..你用CppWebBrowser元件開 請拉一個CppWebBrowser (在Internet那一頁)  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //開啟檔案
  CppWebBrowser1->Navigate(WideString("c:\\test.xls"));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  // 列印
  TVariant OLEvar ;      if(CppWebBrowser1->QueryStatusWB(OLECMDID_PRINTPREVIEW)==3)
    CppWebBrowser1->ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DODEFAULT,EmptyParam,EmptyParam);
  else
  {
    OLEvar = 0 ;
    try{
      CppWebBrowser1->ExecWB ( OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER,OLEvar, OLEvar ) ;
    }catch(...){}
  }
}
//---------------------------------------------------------------------------         
發表人 - bass15 於 2004/08/27 10:44:19
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-27 11:00:32 IP:211.20.xxx.xxx 未訂閱
謝謝你的回覆 但是它有一個問題 當Button1按下時,它會問我要開啟還是儲存 若是被按了儲存,還是會被存到他處去 另一個構想 有沒有什麼方式可以看到Excel的內容 但是不能做任何編輯或存檔的 只要可以列印和看到內文 (禁止選取複製) 發表人 - folkchen 於 2004/08/27 11:04:48
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-27 13:43:37 IP:219.84.xxx.xxx 未訂閱
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //開啟檔案
  CppWebBrowser1->Navigate(WideString("c:\\test.xls"));
  Button1->Enabled = false; //防止人家開第二次
}
或是
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //開啟檔案
  CppWebBrowser1->Navigate(WideString("c:\\test.xls"));
  CppWebBrowser1->Enabled = false; //防止人家修改
}     
發表人 - bass15 於 2004/08/27 13:56:38
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-27 14:59:53 IP:211.20.xxx.xxx 未訂閱
當Button1按下時,它會問我要"開啟"還是"儲存" 這就像是瀏灠器在點選到檔案的URL時出現的那個畫面 與Button1的enable沒有關係 >> CppWebBrowser1->Enabled = false; //防止人家修改 這行可以鎖住資料了 但是上下左右的 Scroll Bar 也被鎖住了 有什麼方法可以移動觀看畫面的嗎 自己另外做一個 Scroll Bar 也沒有關係 只要可以看到想看的部份的資料就可以了 另一個問題 可以CppWebBrowser的大小不變但是將內容物(資料整個)放大縮小嗎?? 這麼多問題,真是麻煩你了
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-27 16:55:10 IP:219.84.xxx.xxx 未訂閱
原來你的Excel檔是放在網路上的阿.. 你要先把它Dowload回自己的電腦再開吧..就不會要你儲存或開啟了.. 另外可以讀取Excel裡面的東西自己來呈現, 請參考 http://delphi.ktop.com.tw/topic.php?topic_id=29910 http://delphi.ktop.com.tw/topic.php?topic_id=54813 http://delphi.ktop.com.tw/topic.php?topic_id=54191
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-27 16:58:45 IP:61.142.xxx.xxx 未訂閱
folkchen: 那妳可否考慮使用ADO加DBGrid來處理, Andy Chang
------
Andy Chang
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-27 17:07:22 IP:211.20.xxx.xxx 未訂閱
bass15: 不是耶~~ 我開的是我的E:中的檔而已 你介紹的連結我會再去試看看的 謝謝~~ andychang1690: 因為我們的資料要利用Excel的表格線及FontSize來讓報表美化 所以才會用這種方式作業
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-27 17:35:38 IP:61.142.xxx.xxx 未訂閱
folkchen:
  建議引用bass15的方式但玩一點點小把戲你試試看!
.hpp
private:        // User declarations
AnsiString SFile;
.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (OpenDialog1->Execute()) {
    if (SFile!= OpenDialog1->FileName) {
      SFile = OpenDialog1->FileName;
      SetFileAttributes(
        SFile.c_str(), // address of filename
        FILE_ATTRIBUTE_READONLY // address of attributes to set
      );
      //開啟檔案
      CppWebBrowser1->Navigate(WideString(SFile));
    }
  }
}
Andy Chang
------
Andy Chang
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-02 13:18:54 IP:211.20.xxx.xxx 未訂閱
andychang1690: 你好 還是會出現那個儲存的Message,因為問題是在 CppWebBrowser1->Navigate(WideString(SFile)); 的身上,它不會自己開檔,會先問再開 我想可能是IE設定上的問題 這個物件可能是因為相容於IE 所以會去引用IE選項設定中的東東吧~~
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-09-02 13:35:56 IP:211.20.xxx.xxx 未訂閱
bass15 : 你好 這3篇文章我都看完了 似乎都是在對Excel的資料做處理 這個部份我都OK 我只有"限制複製"及"限制存檔",這2個功能做不到 限制存檔我可以用Excel的"保護"功能做到 就算他另存新檔了還是不能改資料,因為新檔也還是在保護狀態,他不能改資料 除非他破解保護密碼 但是"限制複製"我就還沒有想到解決方案 因為複製,只會複製資料,我在Excel內做的限制它不會被複製到 他只要去開新檔再貼上,它就可以任意的改資料了
bass15
高階會員


發表:24
回覆:171
積分:119
註冊:2003-10-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-09-06 10:48:27 IP:61.66.xxx.xxx 未訂閱
請問你現在是用什麼方式開Excel阿.. 不然這樣咧..把複製的東西給清掉..拉一個timer元件.. 在開檔時把它Enable..  
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  TClipboard* Clip = Clipboard();
  if(Clip)
    Clip->Clear();
}
 
把timer的Interval設小一點
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-09-06 11:07:07 IP:211.20.xxx.xxx 未訂閱
引言: 請問你現在是用什麼方式開Excel阿.. 不然這樣咧..把複製的東西給清掉..拉一個timer元件.. 在開檔時把它Enable..
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  TClipboard* Clip = Clipboard();
  if(Clip)
    Clip->Clear();
}
 
把timer的Interval設小一點
用你提供的方式呀~~ CppWebBrowser1 但是一直會出現我上述的問題 Clip->Clear(); 這個方式雖然不是最好的方式 但也算是一個解決方案~~ 只要前面那個存檔訊息不出來應該就沒有太大的問題了 P.S:這個方法還是有個小漏洞,User另外開一個Excel再用拖曳的方式拉過去,還是會被複製走,只是想的到的人可能不多
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-09-06 11:30:09 IP:211.20.xxx.xxx 未訂閱
看來似乎沒有更好的解法了 感謝 bass15 大大 這段時間來的協助和測試 原本是希望可以有寫法可以去控制Excel的Menu的方式 總覺得應該可以用 HWND 的方式透過API去控制Excel的Menu選項才對 但時間不夠,要交件了,所以先結案 以後有機會再研究~~
系統時間:2024-04-29 3:34:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!