From ae6246254bff172f71c4a82baa368c8b5d28a11a Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Tue, 28 Jul 2015 22:29:45 +0000 Subject: [PATCH] fpspreadsheet: add demo for html writer git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4219 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../read_write/htmldemo/htmlwrite.lpi | 61 ++++++ .../read_write/htmldemo/htmlwrite.lpr | 174 ++++++++++++++++++ .../examples/read_write/htmldemo/readme.txt | 1 + components/fpspreadsheet/fpshtml.pas | 6 +- 4 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpi create mode 100644 components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr create mode 100644 components/fpspreadsheet/examples/read_write/htmldemo/readme.txt diff --git a/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpi b/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpi new file mode 100644 index 000000000..24037a983 --- /dev/null +++ b/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpi @@ -0,0 +1,61 @@ + + + + + + + + + + + + + <UseAppBundle Value="False"/> + </General> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <RequiredPackages Count="1"> + <Item1> + <PackageName Value="LazUtils"/> + </Item1> + </RequiredPackages> + <Units Count="1"> + <Unit0> + <Filename Value="htmlwrite.lpr"/> + <IsPartOfProject Value="True"/> + </Unit0> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="htmlwrite"/> + </Target> + <SearchPaths> + <OtherUnitFiles Value="..\..\.."/> + <UnitOutputDirectory Value="..\..\lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Parsing> + <SyntaxOptions> + <UseAnsiStrings Value="False"/> + </SyntaxOptions> + </Parsing> + </CompilerOptions> +</CONFIG> diff --git a/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr b/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr new file mode 100644 index 000000000..3e2246b8c --- /dev/null +++ b/components/fpspreadsheet/examples/read_write/htmldemo/htmlwrite.lpr @@ -0,0 +1,174 @@ +{ +htmltablewrite.lpr + +Demonstrates how to write a table in html format using the fpspreadsheet library +} + +program htmlwrite; + +{$mode delphi}{$H+} + +uses + Classes, SysUtils, fpstypes, fpspreadsheet, fpshtml; + +var + MyWorkbook: TsWorkbook; + MyWorksheet: TsWorksheet; + MyDir: string; + row: Integer; + +begin + MyDir := ExtractFilePath(ParamStr(0)); + + // Create the spreadsheet + MyWorkbook := TsWorkbook.Create; + try + MyWorksheet := MyWorkbook.AddWorksheet('Sheet'); + + // Use first row and column as headers + Myworksheet.Options := MyWorksheet.Options + [soHasFrozenPanes]; + Myworksheet.TopPaneHeight := 1; + Myworksheet.LeftPaneWidth := 1; + + // Write colwidth + Myworksheet.WriteColWidth(1, 25); // 25 characters + + // Write some cells + row := 0; + + MyWorksheet.WriteBlank(row, 0); + MyWorksheet.WriteUTF8Text(row, 1, 'Description'); + MyWorksheet.WriteUTF8Text(row, 2, 'Example'); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This is a text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'Hello world!'); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This is bold text:'); + Myworksheet.WriteUTF8Text(row, 2, 'Hello world!'); + Myworksheet.WriteFontStyle(row, 2, [fssBold]); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This is a number:'); + MyWorksheet.WriteNumber(row, 2, 3.141592); + Myworksheet.WriteHorAlignment(row, 2, haRight); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This is a date:'); + Myworksheet.WriteDateTime(row, 2, date()); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This is a long text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'A very, very, very, very long text, indeed'); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Centered text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'I am in the center.'); + MyWorksheet.WriteHorAlignment(row, 2, haCenter); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This is a long text with line break:'); + Myworksheet.WriteVertAlignment(row, 1, vaTop); + MyWorksheet.WriteUTF8Text(row, 2, 'A very, very, very, very long text,<br /> indeed'); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Merged rows'); + Myworksheet.MergeCells(row, 1, row+1, 1); + MyWorksheet.WriteUTF8Text(row, 2, 'A'); + inc(row); + MyWorksheet.WriteUTF8Text(row, 2, 'B'); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Merged columns'); + MyWorksheet.WriteHorAlignment(row, 1, haCenter); + MyWorksheet.MergeCells(row, 1, row, 2); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Right border:'); + MyWorksheet.WriteUTF8Text(row, 2, 'medium / red'); + MyWorksheet.WriteBorders(row, 2, [cbEast]); + MyWorksheet.WriteBorderStyle(row, 2, cbEast, lsMedium, scRed); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Top border:'); + MyWorksheet.WriteUTF8Text(row, 2, 'top / dashed'); + MyWorksheet.WriteBorders(row, 2, [cbNorth]); + MyWorksheet.WriteBorderLineStyle(row, 2, cbNorth, lsDashed); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Left border:'); + MyWorksheet.WriteUTF8Text(row, 2, 'left / dotted'); + MyWorksheet.WriteBorders(row, 2, [cbWest]); + MyWorksheet.WriteBorderLineStyle(row, 2, cbWest, lsDotted); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Bottom border:'); + MyWorksheet.WriteUTF8Text(row, 2, 'bottom / double'); + MyWorksheet.WriteBorders(row, 2, [cbSouth]); + MyWorksheet.WriteBorderLineStyle(row, 2, cbSouth, lsDouble); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'This row is high'); + MyWorksheet.WriteRowHeight(row, 5); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Colors:'); + MyWorksheet.WriteUTF8Text(row, 2, 'yellow on blue'); + MyWorksheet.WriteFontColor(row, 2, scYellow); + MyWorksheet.WriteBackgroundColor(row, 2, scBlue); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'RGB background color:'); + MyWorksheet.WriteUTF8Text(row, 2, 'color #FF77C3'); // HTML colors are big-endian + MyWorksheet.WriteBackgroundColor(row, 2, $C377FF); // fps colors are little-endian + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Bold text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'Bold text'); + MyWorksheet.WriteFontStyle(row, 2, [fssBold]); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Italic text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'Italic text'); + MyWorksheet.WriteFontStyle(row, 2, [fssItalic]); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Underlined text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'Underlined text'); + MyWorksheet.WriteFontStyle(row, 2, [fssUnderline]); + inc(row); + + MyWorksheet.WriteNumber(row, 0, row); + MyWorksheet.WriteUTF8Text(row, 1, 'Strike-through text:'); + MyWorksheet.WriteUTF8Text(row, 2, 'Strike-through text'); + MyWorksheet.WriteFontStyle(row, 2, [fssStrikeout]); + inc(row); + + // Save the spreadsheet to a file + MyWorkbook.WriteToFile(MyDir + 'test.html', sfHTML); + + finally + MyWorkbook.Free; + end; +end. + diff --git a/components/fpspreadsheet/examples/read_write/htmldemo/readme.txt b/components/fpspreadsheet/examples/read_write/htmldemo/readme.txt new file mode 100644 index 000000000..e04258916 --- /dev/null +++ b/components/fpspreadsheet/examples/read_write/htmldemo/readme.txt @@ -0,0 +1 @@ +This demo demonstrates how to use fpspreadsheet to read and write html files which can be opened by the browser. diff --git a/components/fpspreadsheet/fpshtml.pas b/components/fpspreadsheet/fpshtml.pas index 24e5146f2..dd9a29743 100644 --- a/components/fpspreadsheet/fpshtml.pas +++ b/components/fpspreadsheet/fpshtml.pas @@ -268,8 +268,11 @@ begin AppendToStream(AStream, '<body>'); if HTMLParams.SheetIndex < 0 then // active sheet + begin + if FWorkbook.ActiveWorksheet = nil then + FWorkbook.SelectWorksheet(FWorkbook.GetWorksheetByIndex(0)); WriteWorksheet(AStream, FWorkbook.ActiveWorksheet) - else + end else if HTMLParams.SheetIndex = MaxInt then // all sheets for i:=0 to FWorkbook.GetWorksheetCount-1 do WriteWorksheet(AStream, FWorkbook.GetWorksheetByIndex(i)) @@ -453,6 +456,7 @@ end; procedure TsHTMLWriter.WriteToStream(AStream: TStream); begin + FWorkbook.UpdateCaches; AppendToStream(AStream, '<!DOCTYPE html>' + '<html>' +