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 var
book: TsWorkbook; book: TsWorkbook;
sheet: TsWorksheet; sheet: TsWorksheet;
addr, s: String; addr, s, typeStr: String;
rowIndex, colIndex: Cardinal; rowIndex, colIndex: Cardinal;
cell: PCell; cell: PCell;
lCell: TCell; lCell: TCell;
sharedFormulabase: TSharedFormulaData; sharedFormulabase: TSharedFormulaData;
datanode, tnode: TDOMNode; datanode, tnode, rnode: TDOMNode;
dataStr: String; dataStr: String;
formulaStr: String; formulaStr: String;
formula: PsFormula; formula: PsFormula;
@@ -940,6 +940,9 @@ begin
cell^.FormatIndex := 0; cell^.FormatIndex := 0;
end; end;
// Get cell type
typeStr := GetAttrValue(ANode, 't');
// get number format parameters // get number format parameters
numFmt := book.GetNumberFormat(fmt.NumberFormatIndex); numFmt := book.GetNumberFormat(fmt.NumberFormatIndex);
@@ -958,6 +961,15 @@ begin
tnode := datanode.FirstChild; tnode := datanode.FirstChild;
while Assigned(tnode) do begin while Assigned(tnode) do begin
nodename := tnode.NodeName; 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 if (nodename = 't') or (nodeName = 'x:t') then
dataStr := dataStr + GetNodeValue(tnode); dataStr := dataStr + GetNodeValue(tnode);
tnode := tnode.NextSibling; tnode := tnode.NextSibling;