From 65188478a6f9000e838c1c00c9a317a7b9415810 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 20 Dec 2020 22:35:10 +0000 Subject: [PATCH] fpspreadsheet: Fix reading of text cells with type "inlineStr" git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7936 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../fpspreadsheet/source/common/xlsxooxml.pas | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/components/fpspreadsheet/source/common/xlsxooxml.pas b/components/fpspreadsheet/source/common/xlsxooxml.pas index 64b769e8b..3094b3fa1 100644 --- a/components/fpspreadsheet/source/common/xlsxooxml.pas +++ b/components/fpspreadsheet/source/common/xlsxooxml.pas @@ -887,12 +887,12 @@ procedure TsSpreadOOXMLReader.ReadCell(ANode: TDOMNode; var book: TsWorkbook; sheet: TsWorksheet; - addr, s: String; + addr, s, typeStr: String; rowIndex, colIndex: Cardinal; cell: PCell; lCell: TCell; sharedFormulabase: TSharedFormulaData; - datanode, tnode: TDOMNode; + datanode, tnode, rnode: TDOMNode; dataStr: String; formulaStr: String; formula: PsFormula; @@ -940,6 +940,9 @@ begin cell^.FormatIndex := 0; end; + // Get cell type + typeStr := GetAttrValue(ANode, 't'); + // get number format parameters numFmt := book.GetNumberFormat(fmt.NumberFormatIndex); @@ -958,6 +961,15 @@ begin tnode := datanode.FirstChild; while Assigned(tnode) do begin nodename := tnode.NodeName; + if (nodename = 'r') and (typeStr = 'inlineStr') then begin + rnode := tnode.FirstChild; + while Assigned(rnode) do begin + nodename := rnode.NodeName; + if (nodename = 't') or (nodeName = 'x:t') then + dataStr := dataStr + GetNodeValue(rnode); + rnode := rnode.NextSibling; + end; + end else if (nodename = 't') or (nodeName = 'x:t') then dataStr := dataStr + GetNodeValue(tnode); tnode := tnode.NextSibling;