Files
lazarus-ccr/components/fpspreadsheet/examples/other/protection/demo_protection.pas

63 lines
1.5 KiB
ObjectPascal
Raw Normal View History

program demo_protection;
{$mode objfpc}{$H+}
uses
Classes, SysUtils,
fpstypes, fpspreadsheet, fpsallformats, fpsutils, fpscrypto;
const
PASSWORD = 'lazarus';
var
book: TsWorkbook;
sheet: TsWorksheet;
cell: PCell;
c: TsCryptoInfo;
dir: String;
begin
book := TsWorkbook.Create;
try
sheet := book.AddWorksheet('Sheet1');
// Add an unprotected cell
cell := sheet.WriteText(0, 0, 'Unprotected cell');
sheet.WriteCellProtection(cell, []);
// Add a protected cell
sheet.WriteText(1, 0, 'Protected cell');
// Activate worksheet protection such that a password is required to
// change the protection state
InitCryptoInfo(c);
c.Algorithm := caExcel;
c.PasswordHash := Format('%.4x', [ExcelPasswordHash(PASSWORD)]);
sheet.CryptoInfo := c;
sheet.Protection := [spDeleteRows, spDeleteColumns, spInsertRows, spInsertColumns];
sheet.Protect(true);
dir := ExtractFilePath(ParamStr(0));
book.WriteToFile(dir + 'protected.xls', sfExcel8, true);
book.WriteToFile(dir + 'protected.xlsx', sfOOXML, true);
// Note ODS does not write the excel password correctly, yet. --> protection cannot be removed.
book.WriteToFile(dir + 'protected.ods', sfOpenDocument, true);
finally
book.Free;
end;
WriteLn('Open the files "protected.*" in your spreadsheet application.');
WriteLn('Only cell A1 can be modifed.');
if ParamCount = 0 then
begin
{$IFDEF MSWINDOWS}
WriteLn('Press [ENTER] to quit...');
ReadLn;
{$ENDIF}
end;
end.