如何於DELPHI 5中將OLE下傳的EXCEL 欄或列設定保護 |
尚未結案
|
ROCKY
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-31 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Hi, 在 excel 中是沒有直接設定保護某些欄, 列或儲存格的方法, 但是有一個變通的作法, 就是利用 [允許使用者編輯範圍] 來進行反向的操作, 我們可以先設定使用者可以編輯的範圍後(不要設定密碼, 讓一般使用者都可以對這些範圍進行編輯), 然後將工作表保護起來(可設密碼也可以不設密碼, 純保護), 如此一來就可以做到類似保護部分的欄, 列或儲存格的功能了. 以下的程式碼表示僅有'A2:E11'這個範圍使用者可以編輯, 其餘不可, 如下:
procedure TForm1.Button1Click(Sender: TObject); var excel: Variant; begin excel := CreateOleObject('Excel.Application'); excel.WorkBooks.Add; excel.Visible := true; //..... 加入可以讓使用者編輯的範圍 ..... 其中 Range 就是範圍的設定, Title 則是取一個名稱即可, 各範圍不要重複即可 excel.WorkBooks[1].WorkSheets[1].Protection.AllowEditRanges.Add(Title:='Range1', Range:=excel.WorkBooks[1].WorkSheets[1].Range['A2:E11']); ....繼續加入可編輯的範圍... ......... //.....將此工作表保護起來..... excel.WorkBooks[1].WorkSheets[1].Protect(DrawingObjects:=True, Contents:=True, Scenarios:=True); //excel.WorkBooks[1].SaveAs('c:\a.xls'); //excel.Quit; excel := Unassigned; { excel 的巨集錄製部分 ActiveSheet.Protection.AllowEditRanges.Add Title:="範圍1", Range:=Range("A2:E11") ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True } end; |
ROCKY
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-31 發送簡訊給我 |
[HI:
我試了但是出現Method Protection Not supported;
with qyData do
begin
for J := 0 to FieldCount - 1 do
OleExcelWorkSheet.Cells[1, J 1].Value := Fields[J].FieldName;
First;
I := 2;
OleExcelWorkSheet.Cells[2, 1].Value := Fields[1].AsString;
end;
OleExcelWorkSheet.Protection.AllowEditRanges.Add(TITLE:=RANGE1,Range:=OleExcelWorkSheet.Range[G1:G2]);
OleExcelWorkSheet.Protect(DrawingObjects:=True, Contents:=True, Scenarios:=True);
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
ROCKY
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |