You've already forked lazarus-ccr
54 lines
1.4 KiB
ObjectPascal
54 lines
1.4 KiB
ObjectPascal
![]() |
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;
|
||
|
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);
|
||
|
|
||
|
book.WriteToFile('protected.xls', sfExcel8, true);
|
||
|
book.WriteToFile('protected.xlsx', sfOOXML, true);
|
||
|
// Note ODS does not write the excel password correctly, yet. --> protection cannot be removed.
|
||
|
book.WriteToFile('protected.ods', sfOpenDocument, true);
|
||
|
|
||
|
finally
|
||
|
book.Free;
|
||
|
end;
|
||
|
|
||
|
WriteLn('Open the files "protected.*" in your spreadsheet application.');
|
||
|
WriteLn('Only cell A1 can be modifed.');
|
||
|
WriteLn('Press [ENTER] to quit...');
|
||
|
ReadLn;
|
||
|
|
||
|
end.
|
||
|
|