From cbfea142d0e87396d0ab5ead958df0f1e4c37714 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 26 Jul 2020 12:25:06 +0000 Subject: [PATCH] fpspreadsheet: Refactor ODS number format writing git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7567 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../source/common/fpsopendocument.pas | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/components/fpspreadsheet/source/common/fpsopendocument.pas b/components/fpspreadsheet/source/common/fpsopendocument.pas index b765e27f2..8d4e7e440 100644 --- a/components/fpspreadsheet/source/common/fpsopendocument.pas +++ b/components/fpspreadsheet/source/common/fpsopendocument.pas @@ -237,6 +237,7 @@ type function WriteFontStyleXMLAsString(AFont: TsFont): String; overload; function WriteHeaderFooterFontXMLAsString(AFont: TsHeaderFooterFont): String; function WriteHorAlignmentStyleXMLAsString(const AFormat: TsCellFormat): String; + function WriteNumFormatStyleXMLAsString(const AFormat: TsCellFormat): String; function WritePageLayoutXMLAsString(AStyleName: String; const APageLayout: TsPageLayout): String; function WritePrintRangesXMLAsString(ASheet: TsBasicWorksheet): String; function WriteSheetProtectionXMLAsString(ASheet: TsBasicWorksheet): String; @@ -5835,6 +5836,8 @@ var begin addProtection := (AConditionalFormatIndex = -1); + nfs := WriteNumFormatStyleXMLAsString(AFormat); + { nfs := ''; nfidx := AFormat.NumberFormatIndex; if nfidx <> -1 then @@ -5858,7 +5861,7 @@ begin nfs := ''; end; end; - + } AppendToStream(AStream, Format( '', @@ -8164,6 +8167,36 @@ begin end; end; +function TsSpreadOpenDocWriter.WriteNumFormatStyleXMLAsString( + const AFormat: TsCellFormat): String; +var + nfParams: TsNumFormatParams; + nfs: String; + j: Integer; + s: String; + p: Integer; +begin + Result := ''; + if not (uffNumberFormat in AFormat.UsedFormattingFields) then + exit; + + nfParams := TsWorkbook(FWorkbook).GetNumberFormat(AFormat.NumberFormatIndex); + if nfParams <> nil then + begin + nfs := nfParams.NumFormatStr; + for j:=0 to NumFormatList.Count-1 do + begin + s := NumFormatList[j]; + p := pos(':', s); + if SameText(Copy(s, p+1, Length(s)), nfs) then + begin + Result := Format(' style:data-style-name="%s"', [copy(s, 1, p-1)]); + Exit; + end; + end; + end; +end; + function TsSpreadOpenDocWriter.WritePageLayoutXMLAsString(AStyleName: String; const APageLayout: TsPageLayout): String;