我在 "Delphi 报表/打印应用"论坛也提了这个问题,如有高手解答的话,我会将那边的100分也给您。
 我将数据输出到Excel中后,为了不让用户修改,则对Sheet做了保护。但保护的同时我希望用户能够调节列宽和行高。可是在设定这两个属性时Delphi却提示“参数数目不对”!不知为什么!代码如下:
procedure ExportToExcel;
var
  ExcelApp: Variant;
begin
  try
    ExcelApp := CreateOleObject( 'Excel.Application' );
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkSheets[1].Activate;
  except
    Application.MessageBox(PChar('无法调用Mircorsoft Excel! ' + #13#10 + '请检查是否安装了Mircorsoft Excel。'), '提示', mb_ok);
    Exit;
  end;  //..... 将数据输出到Excel  ExcelApp.ActiveSheet.Protect('123');   //对Sheet进行了密码保护
  ExcelApp.ActiveSheet.EnableSelection := $FFFFEFD2;  //同时不让用户对单元格进行选择,这样用户就不能复制了  //我认为应该是这两句设定为True,就允许用户调整行列宽度了,可是如上所说... 请高手指点
  //ExcelApp.ActiveSheet.Protection.AllowFormattingColumns := True;
  //ExcelApp.ActiveSheet.Protection.AllowFormattingRows := True;  ExcelApp.Visible := True ;
end;
  
 
 
 
 
 

解决方案 »

  1.   

    哇! 不会吧,既要答案又要分。公布了答案,是不是大家来给我分才对?呵呵,没关系,既然大家呼声这么高,我怎敢不从命!小的这就端上来请大家品尝,还请大家以后多多捧场。其实很简单:Protect多加些参数就好了。
    ExcelApp.ActiveSheet.Protect('123', EmptyParam, EmptyParam, EmptyParam, EmptyParam, False, True, True);参数含义:
    ([Password], [DrawingObjects], [Contents], [Scenarios], [UserInterfaceOnly],[AllowFormattingCells], [AllowFormattingColumns], [AllowFormattingRows],[AllowInsertingColumns], [AllowInsertingRows], [AllowInsertingHyperlinks],[AllowDeletingColumns], [AllowDeletingRows], [AllowSorting], [AllowFiltering],[AllowUsingPivotTables])