diff --git a/components/fpspreadsheet/examples/other/demo_protection.lpi b/components/fpspreadsheet/examples/other/demo_protection.lpi new file mode 100644 index 000000000..e09c74126 --- /dev/null +++ b/components/fpspreadsheet/examples/other/demo_protection.lpi @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + <UseAppBundle Value="False"/> + <ResourceType Value="res"/> + </General> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + <RunParams> + <FormatVersion Value="2"/> + <Modes Count="0"/> + </RunParams> + <RequiredPackages Count="1"> + <Item1> + <PackageName Value="laz_fpspreadsheet"/> + </Item1> + </RequiredPackages> + <Units Count="1"> + <Unit0> + <Filename Value="demo_protection.pas"/> + <IsPartOfProject Value="True"/> + </Unit0> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="demo_protection"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <UseExternalDbgSyms Value="True"/> + </Debugging> + </Linking> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/components/fpspreadsheet/examples/other/demo_protection.pas b/components/fpspreadsheet/examples/other/demo_protection.pas new file mode 100644 index 000000000..8cb2a55cd --- /dev/null +++ b/components/fpspreadsheet/examples/other/demo_protection.pas @@ -0,0 +1,53 @@ +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. +