From ee1fafb7efa530e406a262a0616e3223b494888b Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Wed, 23 Jul 2014 21:30:01 +0000 Subject: [PATCH] fpspreadsheet: Implement SaveToStream for ODS writer (code from SaveToFile) git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3368 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/fpsopendocument.pas | 30 ++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index 6c9ea71bf..b937cf0ab 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -3147,11 +3147,29 @@ end; } procedure TsSpreadOpenDocWriter.WriteToFile(const AFileName: string; const AOverwriteExisting: Boolean); +var + lStream: TStream; + lMode: word; +begin + if AOverwriteExisting + then lMode := fmCreate or fmOpenWrite + else lMode := fmCreate; + + if (boBufStream in Workbook.Options) then + lStream := TBufStream.Create(AFileName, lMode) + else + lStream := TFileStream.Create(AFileName, lMode); + try + WriteToStream(lStream); + finally + FreeAndNil(lStream); + end; +end; + +procedure TsSpreadOpenDocWriter.WriteToStream(AStream: TStream); var FZip: TZipper; begin - Unused(AOverwriteExisting); - { Analyze the workbook and collect all information needed } ListAllNumFormats; ListAllFormattingStyles; @@ -3172,7 +3190,7 @@ begin { Now compress the files } FZip := TZipper.Create; try - FZip.FileName := AFileName; + FZip.FileName := '__temp__.tmp'; FZip.Entries.AddFileEntry(FSMeta, OPENDOC_PATH_META); FZip.Entries.AddFileEntry(FSSettings, OPENDOC_PATH_SETTINGS); @@ -3183,20 +3201,22 @@ begin ResetStreams; - FZip.ZipAllFiles; + FZip.SaveToStream(AStream); + finally DestroyStreams; FZip.Free; end; end; - + (* procedure TsSpreadOpenDocWriter.WriteToStream(AStream: TStream); begin Unused(AStream); // Not supported at the moment raise Exception.Create('TsSpreadOpenDocWriter.WriteToStream not supported'); end; + *) procedure TsSpreadOpenDocWriter.WriteFormula(AStream: TStream; const ARow, ACol: Cardinal; const AFormula: TsFormula; ACell: PCell);