我在程序里给excel加的密码保护,能不能通过程序给打开的excel赋值,这样该excel文件关闭后还是有密码的,若将密码赋为空,则该excel文件在程序外打开时就没有保护作用了,我要做到的时只有通过我的程序才能打开我建的excel进行修改,其它地方打开后是只读的。

解决方案 »

  1.   

    var
      xls, xlw: Variant;
    begin
      {load MS Excel}
      xls := CreateOLEObject('Excel.Application');  {open your xls-file}
      xlw := xls.WorkBooks.Open(FileName := 'd:\book1.xls', Password := 'qq',
    ReadOnly := True);
      {save with other file name}
      xlw.SaveAs(FileName := 'd:\book2.xls', Password := '');  {unload MS Excel}
      xlw := UnAssigned;
      xls := UnAssigned;
    end;
      

  2.   

    用EXCEL的内建函数,打开EXCEL文件的方式按上面的大虾所说,然后指定一个WORKSHEETSH:Variant;SH := xlw.Sheets[1];// Begin
    SH.unProtect(Password);解密
    do something....;
    SH.Protect(Password);加密
    xlw.Save or Saveas(FileName);
    .....
      

  3.   

    要想实现你所要求的是很难的(一般没法实现),因为excel不像word是打开密码或修改密码
    而是保护工作表和取消保护
    一旦你用程序付给了密码,即取消了密码保护,所以此时文件被关闭的话,下次再打开时就没有密码了
    你只能对活动的excel进行解密和加密操作,可以程序打开时进行解密,然后修改后保存,然后再用程序进行加密。
    但在加密前excel关闭了,就没有密码啦。
    function Tfrm_EditExcel.FindActiveExcel: Boolean;
    var
      Excel1:variant;
    begin
      try
        Excel1:=GetActiveOleObject('Excel.Application');
        Excel:=Unassigned;
        Excel1:=Unassigned;
        Excel:=GetActiveOleObject('Excel.Application');
        isConnected:=true;
      except
        Excel:=Unassigned;
        isConnected:=False;
        Result:=False;
        Exit;
      end;  Result:=True;
    end;