From c42a8fdedb4fd54686f992523d5f3802f3dde538 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 10 May 2015 22:04:09 +0000 Subject: [PATCH] fpspreadsheet: Fix line breaks in header/footer lines for xls and xlsx. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4123 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../fpspreadsheet/fpsheaderfooterparser.pas | 3 +++ components/fpspreadsheet/fpsutils.pas | 4 ++++ components/fpspreadsheet/xlsxooxml.pas | 18 ++++++++++++------ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/components/fpspreadsheet/fpsheaderfooterparser.pas b/components/fpspreadsheet/fpsheaderfooterparser.pas index 26e68e44a..2befa82fb 100644 --- a/components/fpspreadsheet/fpsheaderfooterparser.pas +++ b/components/fpspreadsheet/fpsheaderfooterparser.pas @@ -394,6 +394,9 @@ end; procedure TsHeaderFooterParser.ScanNewLine; begin + if FCurrText <> '' then + AddCurrTextElement; + case FToken of #13: begin AddElement(hftNewLine); diff --git a/components/fpspreadsheet/fpsutils.pas b/components/fpspreadsheet/fpsutils.pas index fea2b3021..22123d853 100644 --- a/components/fpspreadsheet/fpsutils.pas +++ b/components/fpspreadsheet/fpsutils.pas @@ -2217,6 +2217,10 @@ begin '>': WrkStr:=WrkStr + '>'; '"': WrkStr:=WrkStr + '"'; '''':WrkStr:=WrkStr + '''; + { + #10: WrkStr := WrkStr + ' '; + #13: WrkStr := WrkStr + ' '; + } else WrkStr:=WrkStr + AText[Idx]; end; diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas index 707e2f39f..262deb09e 100755 --- a/components/fpspreadsheet/xlsxooxml.pas +++ b/components/fpspreadsheet/xlsxooxml.pas @@ -1192,6 +1192,12 @@ var node: TDOMNode; nodeName: String; s: String; + + function FixLineEnding(AString: String): String; + begin + Result := StringReplace(AString, #10, LineEnding, [rfReplaceAll]); + end; + begin if ANode = nil then exit; @@ -1209,12 +1215,12 @@ begin begin nodeName := node.NodeName; case nodeName of - 'firstHeader': AWorksheet.PageLayout.Headers[0] := GetNodeValue(node); - 'oddHeader' : AWorksheet.PageLayout.Headers[1] := GetNodeValue(node); - 'evenHeader' : AWorksheet.PageLayout.Headers[2] := GetNodeValue(node); - 'firstFooter': AWorksheet.PageLayout.Footers[0] := GetNodeValue(node); - 'oddFooter' : AWorksheet.PageLayout.Footers[1] := GetNodeValue(node); - 'evenFooter' : AWorksheet.PageLayout.Footers[2] := GetNodeValue(node); + 'firstHeader': AWorksheet.PageLayout.Headers[0] := FixLineEnding(GetNodeValue(node)); + 'oddHeader' : AWorksheet.PageLayout.Headers[1] := FixLineEnding(GetNodeValue(node)); + 'evenHeader' : AWorksheet.PageLayout.Headers[2] := FixLineEnding(GetNodeValue(node)); + 'firstFooter': AWorksheet.PageLayout.Footers[0] := FixLineEnding(GetNodeValue(node)); + 'oddFooter' : AWorksheet.PageLayout.Footers[1] := FixLineEnding(GetNodeValue(node)); + 'evenFooter' : AWorksheet.PageLayout.Footers[2] := FixLineEnding(GetNodeValue(node)); end; node := node.NextSibling; end;