diff --git a/components/fpspreadsheet/examples/opendocdemo/opendocwrite.lpr b/components/fpspreadsheet/examples/opendocdemo/opendocwrite.lpr index 38f8bf152..456151c2d 100644 --- a/components/fpspreadsheet/examples/opendocdemo/opendocwrite.lpr +++ b/components/fpspreadsheet/examples/opendocdemo/opendocwrite.lpr @@ -181,6 +181,16 @@ begin MyWorksheet.WriteNumber(row, 6, number6, nfExp, 3); MyWorksheet.WriteNumber(row, 7, number7, nfExp, 3); MyWorksheet.WriteNumber(row, 8, number8, nfExp, 3); + inc(row); + MyWorksheet.WriteUTF8Text(row, 0, 'nfSci, 2 decimals'); + MyWorksheet.WriteNumber(row, 1, number1, nfSci, 2); + MyWorksheet.WriteNumber(row, 2, number2, nfSci, 2); + MyWorksheet.WriteNumber(row, 3, number3, nfSci, 2); + MyWorksheet.WriteNumber(row, 4, number4, nfSci, 2); + MyWorksheet.WriteNumber(row, 5, number5, nfSci, 2); + MyWorksheet.WriteNumber(row, 6, number6, nfSci, 2); + MyWorksheet.WriteNumber(row, 7, number7, nfSci, 2); + MyWorksheet.WriteNumber(row, 8, number8, nfSci, 2); // Creates a new worksheet MyWorksheet := MyWorkbook.AddWorksheet('My Worksheet 2'); diff --git a/components/fpspreadsheet/fpsopendocument.pas b/components/fpspreadsheet/fpsopendocument.pas index c1aa080d8..8a276647d 100755 --- a/components/fpspreadsheet/fpsopendocument.pas +++ b/components/fpspreadsheet/fpsopendocument.pas @@ -332,6 +332,7 @@ var sStyleMap: String; ns: Integer; clr: TsColorvalue; + el: Integer; begin Result := ''; sGrouping := ''; @@ -401,7 +402,7 @@ begin end; // nfExp - if IsTokenAt(nftExpChar, ASection, next) then begin + if (nf = nfFixed) and IsTokenAt(nftExpChar, ASection, next) then begin if (next + 2 < Length(Elements)) and IsTokenAt(nftExpSign, ASection, next+1) and IsTokenAt(nftExpDigits, ASection, next+2) @@ -425,9 +426,39 @@ begin exit; end; end; - end; + + // nfSci: not supported by ods, use nfExp instead. + el := 0; + decs := 0; + while el < Length(Elements) do begin + case Elements[el].Token of + nftDecs: + decs := Elements[el].IntValue; + nftExpChar: + begin + while el < Length(Elements) do begin + if Elements[el].Token = nftExpDigits then begin + expdig := Elements[el].IntValue; + Result := AIndent + + '' + LineEnding + + sColor + AIndent + + ' ' + + sStylemap + AIndent + + ''; + exit; + end; + inc(el); + end; + exit; + end; + end; + inc(el); + end; // ... more to follow... + end; end; { TsSpreadOpenDocReader }