From 8f706c4a8ccbfb31715e186d5de000f5d59f6143 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 15 Jul 2019 11:03:34 +0000 Subject: [PATCH] fpspreadsheet: Fix writing of RC formulas for Excel2003/XML format. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7037 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../read_write/excelxmldemo/excelxmlwrite.lpr | 3 +-- .../source/common/fpspreadsheet.pas | 16 ++++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr b/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr index b84289b60..2605e4ec9 100644 --- a/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr +++ b/components/fpspreadsheet/examples/read_write/excelxmldemo/excelxmlwrite.lpr @@ -144,7 +144,6 @@ begin MyWorksheet.WriteFont(8, 3, 'Courier New', 12, [fssUnderline], scBlue); MyWorksheet.WriteBackgroundColor(8, 3, scYellow); - (********************* to do... MyWorksheet.WriteComment(8, 3, 'This is font "Courier New", Size 12.'); // Write the string formula E1 = A1 + B1 ... @@ -172,7 +171,7 @@ begin RPNSTring('B', RPNFunc(fekConcat, nil))))); - *) + r := 10; MyWorksheet.WriteText(r, 0, 'Writing current date/time:'); inc(r, 2); diff --git a/components/fpspreadsheet/source/common/fpspreadsheet.pas b/components/fpspreadsheet/source/common/fpspreadsheet.pas index 0461ea593..ac238a2d3 100644 --- a/components/fpspreadsheet/source/common/fpspreadsheet.pas +++ b/components/fpspreadsheet/source/common/fpspreadsheet.pas @@ -3036,13 +3036,17 @@ begin if (ACell = nil) or (not HasFormula(ACell)) then exit; - formula := FFormulas.findFormula(ACell^.Row, ACell^.Col); + formula := FFormulas.FindFormula(ACell^.Row, ACell^.Col); oldDialect := formula^.Parser.Dialect; - try - formula^.Parser.Dialect := ADialect; - Result := formula^.Parser.Expression; - finally - formula^.Parser.Dialect := oldDialect; + if oldDialect <> ADialect then begin + try + formula^.Parser.Dialect := ADialect; + formula^.Parser.PrepareCopyMode(ACell, nil); + Result := formula^.Parser.Expression; + finally + formula^.Parser.PrepareCopyMode(nil, nil); + formula^.Parser.Dialect := oldDialect; + end; end; end;