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
This commit is contained in:
wp_xxyyzz
2020-12-20 22:35:10 +00:00
parent a03922b69a
commit 65188478a6

View File

@@ -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;